Dies ist eine alte Version des Dokuments!
SDS011 Feinstaubsensor
Der Sensor hat einen Lüfter und ein USB-UART Adapter, mit dem man am Computer gleich die Daten auslesen kann. Probieren wir das doch mal und stecken ihn gleich an den Raspberry Pi 3 an. Dann mit 'dmsg' den richtigen USB-Port rauskriegen.
dmesg [1712437.854230] usb 1-1.2: reset full-speed USB device number 4 using dwc_otg [1712438.284188] usb 1-1.3: new full-speed USB device number 9 using dwc_otg [1712438.417219] usb 1-1.3: New USB device found, idVendor=1a86, idProduct=7523, bcdDevice= 2.64 [1712438.417231] usb 1-1.3: New USB device strings: Mfr=0, Product=2, SerialNumber=0 [1712438.417236] usb 1-1.3: Product: USB Serial [1712438.417959] ch341 1-1.3:1.0: ch341-uart converter detected [1712438.419645] usb 1-1.3: ch341-uart converter now attached to ttyUSB1
Weiter dann, wie auf dieser Seite beschrieben.
Ich musste noch serial installieren, und auf die Datei, nicht den www-Ordner den Clown gemacht.
sudo python3 -m pip install pyserial
Ach verflixt… geht natürlich nicht. man muss es in python2 machen, sonst kommen Fehlermeldungen der Art: TypeError: unicode strings are not supported, please encode to bytes
Damit es in python3 geht, muss man das, was man an die serielle Schnittstelle schickt, erst in ein Byte-Array wandeln. Dann kann man natürlich nicht wie bei Springs mit + concatenieren. Abfragen auf einzelne Zeichen müssen dann natürlich auch wieder entweder als Byte abgefragt werden, oder als Zahl. Hier mal die Änderungen zwischen den beiden Dateien.
< #print(prefix + ' '.join(x.encode('hex') for x in d))
< print(prefix + ' '.join(hex(x) for x in d))
< ret = bytearray()
< ret.append(0xaa)
< ret.append(0xb4)
< ret.append(cmd)
< for x in data:
< ret.append(x)
< ret.append(0xff)
< ret.append(0xff)
< ret.append(checksum)
< ret.append(0xab)
< #ret = "\xaa\xb4" + chr(cmd) + ''.join(chr(x) for x in data) + "\xff\xff" + chr(checksum) + "\xab"
61,62c52
< #checksum = sum(ord(v) for v in d[2:8])%256
< checksum = sum(v for v in d[2:8])%256
68,69c58
< #checksum = sum(ord(v) for v in d[2:8])%256
< checksum = sum(v for v in d[2:8])%256
74c63
< while byte != b"\xaa":
< #while byte != "\xaa":
91c80
< if d[1] == 0xc0:
> #if d[1] == "\xc0":
