I2C + Python + PC, czyli jak to zrobić bez Cubieboard-a

Moderator: bbiernat

Post Reply
User avatar
pancio
Administrator
Posts: 67
Joined: 18 September 2013, 23:02 - Wed
Location: SILESIA

I2C + Python + PC, czyli jak to zrobić bez Cubieboard-a

Post by pancio »

Mimo, że Cubietruck nie zajmuje dużo miejsca to jednak w zestawie z zasilaczem, pin-pointami, kabelkami sieciowymi etc... potrafi zająć sporo przestrzeni. Dodatkowo, jeśli ktoś chciałby pobawić się magistralą I2C i wszelkiej maści modułami bez zakupu Cubietruck-a to rozwiązaniem jest moduł ALL-IN-ONE zawierający układ CH341A:
allinone-ch341a-01.jpg
Moduł dostępny jest na znanym portalu w cenie ok 10$, dużo? Nie, jeśli zauważymy, że prócz magistrali I2C możemy używać SPI oraz pełnego układu UART. Dodatkowo moduł pozwala na pracę z 2 napięciami 5V i 3V3, co pozwala na używanie dowolnych modułów bez konieczności stosowania konwertera napięć.

Zaczynamy

Do poprawnej pracy naszego modułu będziemy potrzebować modułu jądra obsługującego funkcje I2C dla układu CH341A. Nie jestem hakerem jądra Linuxa dlatego poszperałem po sieci i znalazłem moduł napisany przez Tse Lun Bien-a (allanbian) dostępny w repozytorium GitHub-a: https://github.com/allanbian1017/i2c-ch341-usb

Należy pobrać i rozpakować archiwum. W katalogu znajduje się plik Makefile, czyli procedura kompilacji sprowadza się do prostego make. Jeśli kompilacja przebiegnie poprawnie możemy już używać naszego modułu poprzez wykonanie:

Code: Select all

insmod i2c-ch341-usb.ko
Warto skopiować powstały plik do /lib/modules/... by następnym razem moduł ładował się automatycznie.

Teraz Python...
Do poprawnej obsługi SMBus i I2C potrzebujemy zainstalować:

Code: Select all

aptitude install i2c-tools libi2c-dev python-smbus
Od tego momentu możemy używać naszego modułu z CH341A jako pełnoprawnej magistrali I2C. Pamiętać należy, że prawdopodobnie nie jest to jedyna magistrala I2C dostępna w naszym systemie. Komputer używa jej również do komunikacji z czujnikami zlokalizowanymi na płycie głównej (np RTC, termometr). U mnie CH341A dostępny był pod numerem 4.

Niestety, u mnie wyszukiwanie urządzeń podpiętych pod CH341A nie działa prawidłowo:

Code: Select all

desktop ~ # i2cdetect -y 4
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 
10: 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 
20: 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f 
30: 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f 
40: 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f 
50: 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f 
60: 60 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 
70: 70 71 72 73 74 75 76 77                         
desktop ~ # 
Czyli przed użyciem podpinanych modułów muszę wiedzieć jaki maja adres. Może autor poprawi kiedyś tę niedogodność :-)
Póki co, pozostaje nam sprawdzenie w dokumentacji danego modułu. Tak czy siak, omawiany dziś interface jest świetną alternatywą dla kogoś kto nie chce kupować drogiego poniekąd CT (75$)...
allinone-ch341a-02.jpg
Attachments
CH341DS1.PDF
(195.64 KiB) Downloaded 2460 times
i2c-ch341-usb-master.zip
(3.24 KiB) Downloaded 2471 times

Post Reply