In diesem Artikel berichtet MVP Liu Hongfeng über seine Erfahrungen beim Verbinden eines Raspberry Pi-Geräts mit der Cloud mithilfe der Alibaba Cloud IoT Platform.
Geschrieben von Hongfeng Liu, MVP von Alibaba Cloud unten.
Ich bin Alibaba Cloud MVP und Alibaba Cloud IoT-Plattform Es ist mir eine Ehre, die erste Person zu sein, die aus der Sicht des Benutzers testet. Ich bin mit Alibaba Cloud IoT-Plattform und von Anfang an mit der Hardware der Feifeng-Plattform (Vorgänger von Link Develop, einer One-Stop-Entwicklungsplattform) vertraut. Ich hatte die Gelegenheit, an einigen Zugangsarbeiten teilzunehmen. Ich habe auch miterlebt, wie das Alibaba Cloud IoT-Team schnell von Dutzenden auf Hunderte gewachsen ist. Der auf dieser IoT-Plattform gehostete Inhalt wurde ebenfalls schnell erweitert. Die Basisversion des IoT-Entwicklungskits "Hien", die One-Stop-Entwicklungsplattform "Link Develop" und die erweiterte Version des IoT-Entwicklungskits "Hien", "Flying", Es gab "City Brain", "Agricultural Brain", "Industrial Interconnection Platform" und so weiter. Daher ist es eine Herausforderung, jedes IoT-Produkt von Alibaba Cloud einzuholen und vollständig zu verstehen.
Zunächst verwendeten wir die Single-Chip + .NET MF-Plattform der MCU und implementierten den entsprechenden Code, um die Alibaba Cloud Platform direkt über das MQTT-Protokoll zu verbinden. Die IoT-Plattform kann je nach Konfiguration auch flexibel verbunden werden, aber einige WEB-, AI- und Cloud-Entwickler sind noch nicht damit vertraut. Aufgrund dieser Anforderungen sind fortgeschrittene Sprachen wie JS, Java und Python in die Hardwareentwicklung eingetreten und können jetzt direkt auf dem MCU-Chip ausgeführt werden, wodurch die Verbindung zwischen der Cloud und IoT-Geräten erheblich beschleunigt wird. Es war.
In diesem Artikel habe ich versucht, die Cloud- und IoT-Geräte basierend auf Raspberry Pi mit Python, einer erweiterten Sprache, zu verbinden. [Vorheriger Artikel](https://www.alibabacloud.com/blog/developing-apps-on-alibaba-cloud-iot-platform-with-raspberry-pi-and-node-js_594346?spm=a2c65.11461447.0. 0.497c7a71qSel56) führte ein, wie es mit Node.js ausgeführt wird.
Nachfolgend finden Sie die vom Alibaba Cloud-Team bereitgestellte Testhardware.
Sie müssen das Betriebssystem für den Raspberry Pi installieren.
Ich habe die Raspbian-Firmware installiert, aber Sie können sie installieren, indem Sie die hier angegebenen Schritte ausführen: [https://www.yuque.com/cloud-dev/iot-tech/ig269q](https: // www.yuque.com/cloud-dev/iot-tech/ig269q?spm=a2c65.11461447.0.0.497c7a71iYpNQM)
Installieren Sie das Python SDK für die Alibaba Cloud Platform
Führen Sie den folgenden Befehl aus.
pip install aliyun-python-sdk-iot-client
Nach der Installation der Raspbian-Firmware und des Python SDK müssen Sie den Code in Python schreiben, um das Projekt auszuführen. Der Beispielcode stammt aus der Dokumentation zur Alibaba Cloud Platform (https://www.yuque.com/cloud-dev/iot-tech/rz6fpl. Bereits in? Spm = a2c65.11461447.0.0.497c7a71iYpNQM)) bereitgestellt, ist die Funktionalität relativ einfach. Senden Sie einfach zwei Zufallszahlen in die Cloud.
Wir entwerfen ein relativ komplexes Szenario, das zunächst eine bidirektionale Kommunikation realisiert, sodass Sensordaten an die Cloud gesendet und Befehle aus der Cloud gesendet werden können, um verwandte Geräte zu steuern.
Zum Hochladen von Daten haben wir den realen Sensor DHT11 ausgewählt, der Temperatur- und Feuchtigkeitswerte erfassen kann. Es gibt auch ein LED-Modul, das den Ein / Aus-Zustand des Lichts mit Befehlen aus der Cloud steuert.
Das Pin-Definitionsdiagramm von Raspberry Pi lautet wie folgt.
Das DHT11-Modul besteht aus drei Leitungen, die zur Einzelbuskommunikation gehören. Die Stromleitung ist mit 5V-4-Pin verbunden, die Erdungsleitung ist mit GND-6-Pin verbunden und der Kommunikations-Pin ist mit GPIO16-36-Pin verbunden. Das LED-Modul besteht ebenfalls aus drei Leitungen. Die Stromleitung ist mit 3V3-1pin verbunden, die Erdungsleitung ist mit GND-9pin verbunden und die Steuerleitung ist mit GPIO4-7pin verbunden. Die LED-Steuerung kann relativ einfach erreicht werden, indem einfach die hohen und niedrigen Pegel der Stifte gesteuert werden.
led_pin = 4 //GPIO is 4
GPIO.setmode(GPIO.BCM) //GPIO definition of BCM
GPIO.setup(led_pin, GPIO.OUT) //Set to output mode
Mach das Licht an:
GPIO.output(led_pin, GPIO.HIGH)
Turn off the light:
GPIO.output(led_pin, GPIO.LOW)
DHT11 ist relativ komplex. Weitere Informationen finden Sie in dem Blog-Beitrag, den ich 2010 geschrieben habe (Verwandter Link: https://blog.csdn.net/yfiot/article/details/5996524 / article / details / 5996524)))
Aufgrund der großen Menge an Code ist es als Funktion verpackt, die gleichzeitig zwei Werte für Temperatur (T) und Luftfeuchtigkeit (H) zurückgibt.
Viele der Python-basierten Beispiele im Internet lesen Temperatur und Luftfeuchtigkeit einmal. Wenn Sie kontinuierlich lesen möchten, müssen Sie das Zeitintervall auf ca. 3 Sekunden einstellen, da es sonst leicht fehlschlägt. Da Linux nicht in Echtzeit ausgeführt wird, haben wir festgestellt, dass wir selbst mit einem Zeitintervall von 3 Sekunden möglicherweise nicht in der Lage sind, die richtigen Temperatur- und Feuchtigkeitswerte zu erhalten, und dass wir möglicherweise die falschen Werte erhalten, die die Validierung bestanden haben.
Da der Daten-Pin von DHT11 mit GPIO16 verbunden ist, ist der Pin-Code wie folgt definiert.
dht_pin =16
The code that encapsulates the function is as follows:
def GetDTH():
data = []
j = 0
GPIO.setup(dht_pin, GPIO.OUT)
GPIO.output(dht_pin, GPIO.LOW)
time.sleep(0.02)
GPIO.output(dht_pin, GPIO.HIGH)
GPIO.setup(dht_pin, GPIO.IN)
while GPIO.input(dht_pin) == GPIO.LOW:
continue
while GPIO.input(dht_pin) == GPIO.HIGH:
continue
while j < 40:
k = 0
while GPIO.input(dht_pin) == GPIO.LOW:
continue
while GPIO.input(dht_pin) == GPIO.HIGH:
k += 1
if k > 100:
break
if k < 8:
data.append(0)
else:
data.append(1)
j += 1
humidity_bit = data[0:8]
humidity_point_bit = data[8:16]
temperature_bit = data[16:24]
temperature_point_bit = data[24:32]
check_bit = data[32:40]
humidity = 0
humidity_point = 0
temperature = 0
temperature_point = 0
check = 0
for i in range(8):
humidity += humidity_bit[i] * 2 ** (7-i)
humidity_point += humidity_point_bit[i] * 2 ** (7-i)
temperature += temperature_bit[i] * 2 ** (7-i)
temperature_point += temperature_point_bit[i] * 2 ** (7-i)
check += check_bit[i] * 2 ** (7-i)
tmp = humidity + humidity_point + temperature + temperature_point
if check == tmp:
return temperature,humidity
else:
print "wrong"
return 0,0
Sobald diese Vorbereitungen abgeschlossen sind, definieren wir die relevanten Produkte und Geräte in der Cloud. Im Gegensatz zum offiziellen Beispiel von Alibaba Cloud haben wir eine lesbare und beschreibbare Attribut-LED hinzugefügt und eine Aufzählungsvariable verwendet, bei der 0 deaktiviert und 1 aktiviert ist.
Sobald diese Vorbereitungen abgeschlossen sind, definieren wir die relevanten Produkte und Geräte in der Cloud. Im Gegensatz zum offiziellen Beispiel von Alibaba Cloud haben wir eine lesbare und beschreibbare Attribut-LED hinzugefügt und eine Aufzählungsvariable verwendet, bei der 0 deaktiviert und 1 aktiviert ist.
client.on_message = on_message
Mit anderen Worten, Sie können die Informationen aus der Cloud übertragen.
Der von der Cloud gepostete Informationsgehalt ist wie folgt.
{"method":"thing.service.property.set","id":"169885527","params":{"LED":1},"version":"1.0.0"}
Wir müssen den Wert der LED ermitteln, also müssen wir der Funktion on_message etwas hinzufügen.
setjson = json.loads(msg.payload)
led = setjson['params']['LED']
GPIO.output(led_pin,(GPIO.HIGH if led==1 else GPIO.LOW ))
Es wird basierend auf dem LED-Wert ein- und ausgeschaltet.
Laden Sie den entsprechenden Code nach dem Ändern auf Ihr Raspberry Pi-Gerät hoch und starten Sie ihn wie in der folgenden Abbildung gezeigt.
Wenn Sie zu diesem Zeitpunkt den Status des Cloud-Geräts überprüfen, können Sie feststellen, dass die Daten normal in die Cloud hochgeladen wurden.
Wir führen Datenverteilungstests im Online-Debug-Panel von Cloud-Produkten durch. Senden Sie 0 oder 1, um festzustellen, ob die LED aus oder an ist.
Im Allgemeinen werden Sie feststellen, dass IoT-Code mit der bekannten Python-Sprache einfach zu schreiben ist.
Recommended Posts