Lätt temperatur och fuktighet på Raspberry Pi (4 / 5 steg)
Steg 4: Tinker
Här analyserar vi kommer att varje del av skriptet gör, så du kan förstå det, och modifiera den för dina projekt.
Först och främst måste vi öppna serieporten. Skriptet använder PySerial modul för att göra detta.
importera följetong
ser = följetong. Serial ('/ dev/ttyAMA0', 9600, timeout = 1)
Nu, låt oss fråga sensorn för bygga värde. Det är ett statiskt värde som identifierar versionen av EzTemp.
Först måste vi skicka kommandot "v" till EzTemp:
ser.write("v")
Bygga värdet är ett 2-byte värde, så bör vi förvänta oss ett 4-byte (1-byte echo + 2 byte bygga + 1-byte checksum) svar från EzTemp. Nu läsa svaret:
s = ser.read(4)
Data tas emot i separata bytes, även om bygga identifieraren är ett 2-byte-värde. För att "rekonstruera" det, måste vi den mest signifikanta byten 8 bitar till vänster och Lägg sedan till den minst signifikanta byten. Detta sätt vi återställa fältet 2 byte korrekt:
version = (ord(s[1]) << 8) + ord(s[2])
Du kan använda meningen ovan varje gång du får en 2 byte värde från EzTemp.
Den sista raden i detta block skriver helt enkelt ut resultatet på skärmen:
skriva ut "EzTemp & RH bygga" + str(version)
Resten av skriptet gör samma fråga sensor värden från EzTemp. Låt oss se temperatur värdet som ett exempel:
ser.write("d")
s = ser.read(4)
temperatur = (ord(s[1]) << 8) + ord(s[2])
skriva ut "temperatur:" + str(1.0*temperature/10) + "C"
I det här fallet använder vi kommandot hade "att fråga temperaturen i celsius grader med 0.1ºC precision. Som ni kan se, är fångst av svar ganska lika. Skillnaden är om hur man hanterar det returnerade värdet.
När vi söker temperatur eller andra parametrar med 0.1 precision, tas data emot som en 2-byte heltal i tiondelar av värdet. Detta är, om temperaturen är 21.5ºC, EzTemp får värde 215 och förbrukaren skriften måste dividera med 10 för att få den faktiska temperaturen.
Alla värden har ett heltal precision kommando om du inte kräver decimaler. Med dessa kommandon easens läsning och bearbetning av data som returnerades. Kolla databladet för den fullständiga listan med kommandon.