LinkedIn YouTube Facebook
Szukaj

Wstecz
Artykuły

[PRZYKŁAD] Obsługa KAmodLPS25HB za pomocą minikomputera Orange Pi Zero

Aby móc korzystać z interfejsu I2C oraz języka python należy zainstalować poniższe pakiety:

sudo apt-get install python-dev
sudo apt-get install i2c-tools

Następnie sprawdzamy czy system widzi porty I2C

ls -ls /dev | grep i2c

Powinny pokazać się wpisy informujące o plikach w folderze /dev reprezentujących porty I2C:

Kolejnym krokiem jest sprawdzenie co jest podłączone do portu I2C numer 1:

sudo i2cdetect -y 1

System widzi jedno urządzenie o adresie 0x5c. Wszystko jest w porządku. Można przejść do instalowania biblioteki odpowiedzialnej za obsługę GPIO w komputerze.

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

Jeśli nie widzimy komunikatów o błędach można w tej chwili swobodnie korzystać z biblioteki. Ostatni etapem projektu jest przygotowanie i uruchomienie kodu napisanego w języku python. Oto prosta klasa LPS25, która implementuje najważniejsze funkcje obsługi czujnika:

#!/usr/bin/python 

# LPS25.py
# Klasa do obslugi czujnika LPS25HB
# Maciej Ropelewski
# mikrokontroler.pl 2017
from pyA20 import i2c
import ctypes
class LPS25:

	def init(self):
		self.writeReg(0x20, 0xB0);

	def writeReg(self,reg, val):
		i2c.write([reg,val])

	def readReg(self, reg):
		i2c.write([reg])
		return i2c.read(1)
	
	def czytajCisnienie(self):
		pxl = self.readReg(0x28)
		pl = self.readReg(0x29)
		ph = self.readReg(0x2a)
		return (ph[0]<<16 | pl[0]<< 8 | pxl[0])/4096.0
	
	def czytajTemperature(self):		
		tl = (self.readReg(0x2b)[0])
		th = (self.readReg(0x2c)[0])
		ttemp = (th << 8 | tl)
		temp=ctypes.c_int16(ttemp) #konwersja danych na int16
		return 42.5 +float(temp.value)/480

W funkcji init wysyłamy niezbędną konfigurację czujnika. Funkcje writeReg i readReg pozwalają na wpisanie własnych wartości do rejestrów konfiguracyjnych, lub odczytanie wartości w rejestrze czujnika. Funkcja czytajCisnienie odczytuje wskazania ciśnienia atmosferycznego, a następnie oblicza jego wartość w milibarach. Podobnie działa funkcja czytajTemperature. Tu z kolei wartości wyskalowane są w stopniach Celsjusza. Warto zwrócić uwagę, że czujnik zwraca wartość temperatury jako 16-bitową liczbę typu integer ze znakiem. Aby poprawnie odczytać wartość koniecznie trzeba skonwertować odczytane dane na int16.

Kolejny plik to główny plik przykładu PrzykladLPS25H.py.

#!usr/bin/python3

# PrzykladLPS25H.py
# ilustracja dzialania czujnika LPS25HB
# Maciej Ropelewski
# mikrokontroler.pl 2017

from pyA20 import i2c
import time
from LPS25 import LPS25

adres_czujnika = 0x5c
i2c.init("/dev/i2c-1")
i2c.open(adres_czujnika)
czujnik = LPS25()
czujnik.init()
while True:
	temp = czujnik.czytajTemperature()
	cisnienie =czujnik.czytajCisnienie()
	print ('Cisnienie: %.2f mbar || Temperatura: %.2f st. C' % (cisnienie,temp))
	time.sleep(3)

i2c.close()	

W pliku inicjalizowane jest połączenie i2c, wywołana instancja klasy LPS25, a następnie wstępnie konfigurowany jest czujnik. W pętli programu co ok. 3 sekundy odczytywane są wartości ciśnienia i temperatury a następnie obie wypisywane w oknie terminala. Cały kod znajduje się w sekcji „do pobrania”.

Bardzo wygodnym sposobem kopiowania plików przez protokół SSH jest użycie programu WinSCP (Dla systemów Windows). Logujemy się na niego podając to samo IP, login i hasło co dla konsoli SSH. Wybieramy protokół SCP. Po zalogowaniu można w intuicyjny sposób kopiować pliki z jednego urządzenia na drugie (Interfejs jest identyczny jak w programie Total Commander). Po lewej stronie mamy widoczne pliki na naszym komputerze, po prawej – na Orange Pi Zero.

Po zgraniu plików należy wrócić do konsoli i uruchomić program za pomocą następującej komendy:

sudo python PrzykladLPS25H.py

Efekt prawidłowego działania programu przedstawiono na poniższym obrazku:

Program można wyłączyć np. skrótem klawiszowym Ctrl-Z. Przed wyłączeniem komputera z sieci zasilającej należy użyć polecenia:

sudo poweroff

I dopiero po zgaszeniu diody odłączyć zasilanie.