Hiearchie článků
 
Orange Pi Zero - blikáme LEDkou, měříme teplotu (I2C) a posíláme data (SPI), vše v Pythonu


V dnešním článku o Orange Pi Zero si zablikáme LEDkou, změříme teplotu senzorem AD7415, který komunikuje přes I2C a pak pošleme data do NRF24L01 přes SPI. Bohužel NRF24L01 se mi nepodařilo zprovoznit, OPi Zero ale data posílá. Všechen kód napíšeme v pythonu.

Další články o Orange Pi Zero:
Orange Pi Zero - seznámení a první boot
Orange Pi Zero - spotřeba, termokamera, benchmark
Orange Pi Zero - WiFi, ethernet, speedtest, USB, armbian
Orange Pi Zero - další informace, shield
Orange Pi Zero - blikáme LEDkou, měříme teplotu (I2C) a posíláme data (SPI), vše v Pythonu


V operačním systému armbian jsou již I2C sběrnice povoleny. Stačí je tedy použít. Nejprve si ale zablikáme LEDkou.

Stáhneme si z gitu tuto knihovnu pro ovládání periferií určenou pro Allwinner H3, nicméně tyto periferie jsou s Allwinner H2+ stejné (zatím to tedy tak vypadá).
Projekt je založen na Olimex jednodeskovém počítači.

git clone https://github.com/duxingkei33/orangepi_PC_gpio_pyH3
cd ./orangepi_PC_gpio_pyH3
sudo python setup.py install

V případě chyby error: command 'arm-linux-gnueabihf-gcc' failed with exit status 1 nainstalujete python3-dev
sudo apt-get install python3-dev

Nyní bychom měli mít všechno připraveno.
Zde je python script - bllikání LEDkou na PA10

Spuštění scriptu provedeme tímto příkazem.
sudo python ./Cesta_k_LED_PA10.py

Tak to bychom měli. Jednoduchou změnou několika řádek můžete i data z GPIO číst a následně provést nějakou akci.

Měříme teplotu teplotním čidlem AD7415.

Čidlo je připojeno na I2C1, tedy
I2C1_SCK PA18
I2C1_SDA PA19


Kromě použití obvyklého nástroje i2c-tools, můžeme použít github knihovnu pro Orange Pi s procesorem Allwinner H3 (Alwinner H2+).

Opět využijeme https://github.com/duxingkei33/orangepi_PC_gpio_pyH3
(git clone https://github.com/duxingkei33/orangepi_PC_gpio_pyH3
cd ./orangepi_PC_gpio_pyH3
python setup.py install )

Ukázka práce s I2C sběrnicí bude již tradičně s čidlem teploty AD7415.
Python script naleznete zde.

Čidlo je připojeno k I2C sběrnici s označneím I2C-1, na schématu označeno jako TWI1.
VDD - 3.3V
GND - GND
TWI1-SCK (PA18) - CLK (či SCK)
TWI1 - SDA (PA19) - SDA


Adresa mého AD7415 je 0x4A a prvních 8 bitů teploty je čteno z adresy 0x00.

Posíláme data do NRF24L01 (SPI)
Hned na úvod napíši, že Orange Pi Zero sice posílá data skrze SPI, ale NRF24L01 (bezdrátový modul pro frekvenci 2.4 GHz) mu nějak nerozumí.
Zatím jsem nepřišel na to, zda je problém v Orange Pi Zero a SPI periferii či špatně nastavuji CSN a CE pin.
Nicméně, i tak zde popíši jak jsem SPI "zprovoznil".

Využil jsem SPI-1.
SPI1_CLK PA14
SPI1_MISO PA16
SPI1_MOSI PA15


Pokud používáte operační systém armbian, musíte upravit script.bin ve složce /boot/.

Samotný binární soubor není možné jednoduše upravit. Musíme si nejprve stáhnout sunxi-tools.
Nejprve nainstalujeme libusb:
sudo apt-get install libusb-1.0-0-dev pkg-config
S instalcí sunxi-tools nám poradí domovská stránka projektu
http://linux-sunxi.org/Sunxi-tools

Po úspěšné instalaci upravíme script.bin. Nejprve si ho však zazálohujeme.
cp /boot/script.bin /boot/script_BackUp.bin
Upravený fex s povoleným SPI získáme na této adrese.
https://github.com/igorpecovnik/lib/blob/master/config/fex/orangepizero.fex

Orangepizero.fex převedeme na script.bin.
cd /boot/
sudo /LinkToSunxi-tools/fex2bin orangepizero.fex script.bin


Tak, nyní by nám mělo SPI fungovat.
K dispozici jsou dvě python knihovny.
První python knihovna je stejná jako pro ovládání GPIO a I2C.
https://github.com/duxingkei33/orangepi_PC_gpio_pyH3

Můj python script naleznete zde. Script nastaví NRF24L01 jako vysílač s defaultním nastavením registrů (i adresou a kanálem) a posílá "abcdefgh".

Druhou python knihovnou je SPI-Py.
Stažení provedete:
git clone https://github.com/lthiery/SPI-Py
cd ./SPI-Py


Pro použití SPI1 namísto SPI0 editujte soubor spi.c, řádek 37 z static const char *device = "/dev/spidev0.0"; na static const char *device = "/dev/spidev1.0";
A provedeme:
sudo python setup.py install
Stažený balík obsahuje soubor test-nRF.py, který vyčte všechny registry.

Zde je můj script, který opět nastaví NRF24L01jako vysílač a vysílá data "abcdefgh" na defaultním kanálu s defaultní adresou.

Pokud mi najdete chybu ve scriptu nebo vám naopak bude NRF24L01 s Orange Pi Zero fungovat, dejte mi prosím vědět. Díky.
Díky za pomoc mikrozone.sk
Diskuze
 
Upozornění
Administrátor těchto stránek ani autor článků neručí za správnost a funkčnost zde uvedených materiálů. Administrátor těchto stránek se zříká jakékoli odpovědnosti za případné ublížení na zdraví či poškození nebo zničení majetku v důsledku elektrického proudu, chybnosti schémat nebo i teoretické výuky. Je zakázané používat zařízení, která jsou v rozporu s právními předpisy ČR či EU.

Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tato nekomerční stránka nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ.