IoT Projekte

Richten Sie das WLAN des Raspberry Pi über Bluetooth ein, um dann Daten an Ubidots zu senden

Ammar Chauhan
· 9 Minuten Lesezeit
Per E-Mail versenden

Mindestens einmal in Ihrem Leben hatten Sie Schwierigkeiten, die WLAN-Zugangsdaten eines Raspberry Pi einzurichten, nur weil Sie gerade keinen Monitor dabei hatten.

In dieser Anleitung beschreibe ich, wie man einen Raspberry Pi mit einem AP (Access Point) konfiguriert, der über eine tragbare Android-App erfolgen kann. Sie können kein Ethernet-Kabel anschließen, nur weil Sie sich an einem neuen Standort befinden? Machen Sie sich keine Sorgen – nachdem Sie dieser Anleitung gefolgt sind, können Sie Ihren Pi an jedem beliebigen Ort verwenden. Sie müssen lediglich das Netzwerk scannen, das gewünschte Netzwerk zum Herstellen der Verbindung auswählen, die Anmeldeinformationen eingeben und schon sind Sie verbunden!

Ich habe ein einfaches Tool bereitgestellt, das es ermöglicht, die SSID und PSK des Raspberry Pi Wi-Fi über Bluetooth-Kommunikation festzulegen. Im Moment ist es sehr einfach – Sie müssen lediglich Ihr Android-Telefon zuvor mit Ihrem Raspberry Pi gekoppelt haben und ich habe eine einfache Android-App geschrieben.

Persönlich denke ich, dass dies wirklich nützlich für diejenigen ist, die mit ihrem Raspberry Pi unterwegs sind, ihn von einer Werkstatt in eine andere transportieren, ihn von Haus zu Schule mitnehmen und all die möglichen Fälle, die Ihnen gerade im Kopf herumschwirren ... Nun, Ohne mehr zu besprechen, beginnen wir mit der Entwicklung cooler Dinge, beginnend mit der Installation des Python-Skripts, das auf unserem Raspberry Pi ausgeführt wird.

Anforderungen

Schritt für Schritt

  1. Bluetooth des Raspberry Pi einrichten
  2. Koppeln von Raspberry Pi und Android-Telefon
  3. DHT22-Sensor einstellen – Hardware
  4. DHT22-Sensor einstellen – Software
  5. Senden/Visualisierung von Daten an Ubidots

1. Bluetooth des Raspberry Pi einrichten

Zu Beginn benötigen Sie einen angeschlossenen Monitor + Tastatur oder können über SSH auf den Raspberry Pi zugreifen, um alle erforderlichen Konfigurationen über das Raspbian-Terminal vornehmen zu können.

Führen Sie die folgenden Befehle sorgfältig aus, um die richtigen Konfigurationen festzulegen:

  1. Installieren Sie bluez (Python-Bluetooth-Bibliothek):
$ sudo apt-get install python-bluez

2. Starten Sie den Bluetooth-Daemon im Kompatibilitätsmodus. Bearbeiten Sie dazu /etc/systemd/system/dbus-org.bluez.service , indem Sie den folgenden Befehl ausführen:

$ sudo nano /etc/systemd/system/dbus-org.bluez.service

3. Ändern Sie dann den ExecStart -Parameter:

ExecStart=/usr/lib/bluetooth/bluetoothd –C

4. Laden Sie nun das Profil der seriellen Schnittstelle mit dem folgenden Befehl:

$ sudo sdptool SP hinzufügen

5. Um die Änderungen ordnungsgemäß zu speichern, starten Sie Ihren Pi neu:

$ sudo Neustart

Nach dem Neustart koppeln wir Bluetooth mit unserem Android-Telefon

2. Koppeln von Raspberry Pi und Android-Telefon.

1. Koppeln Sie Ihr Android-Telefon mit Ihrem Raspberry Pi. Schalten Sie dazu das Bluetooth Ihres Telefons ein und führen Sie den folgenden Befehl auf Ihrem Pi aus:

$ Bluetoothctl

Sobald der Kopplungsprozess beginnt, werden die folgenden Parameter eingegeben. (Sehen Sie sich das Bild an, um eine bessere Vorstellung vom Fließprozess zu erhalten.)

Einschalten, erkennbar beim Scannen

An diesem Punkt wird Ihr Telefon in der Liste der verfügbaren Geräte angezeigt. Notieren Sie sich die Adresse Ihres Telefons.

Vertrauen<PHONE_ADDRESS> Paar<PHONE_ADDRESS>

2. Um die Bluetooth-Steuerung einfach zu beenden, schreiben Sie den Befehl quit:

$ beenden

3. [OPTIONAL – PROFITIPP] Sie können die obige Einrichtung überspringen, indem Sie Bluetooth mit der Benutzeroberfläche von Raspbian einrichten. Drücken Sie einfach auf das Bluetooth-Symbol und wählen Sie Bluetooth für Ihr Telefon aus.

4. Fügen Sie nach dem Koppeln von Bluetooth das Python-Skript direkt in Raspbian ein, indem Sie den Nano -Befehl eingeben und den Quellcode kopieren/einfügen

$ sudo nano run.py

Quellcode (Kopieren/Einfügen):

#!/usr/bin/env python #Run.py Betriebssystem aus Bluetooth importieren Import * aus WLAN Import Zelle, Schema Import Unterprozess Importzeit wpa_supplicant_conf = "/etc/wpa_supplicant/wpa_supplicant.conf" sudo_mode = "sudo " def wifi_connect(ssid , psk): # WLAN-Konfiguration in Datei schreiben cmd = 'wpa_passphrase {ssid} {psk} | sudo tee -a {conf} > /dev/null'.format( ssid=str(ssid).replace('!', '\!'), psk=str(psk).replace('!', '\ !'), conf=wpa_supplicant_conf ) cmd_result = "" cmd_result = os.system(cmd) print cmd + " - " + str(cmd_result) # WLAN neu konfigurieren cmd = sudo_mode + 'wpa_cli -i wlan0 reconfigure' cmd_result = os.system (cmd) print cmd + " - " + str(cmd_result) time.sleep(10) cmd = 'iwconfig wlan0' cmd_result = os.system(cmd) print cmd + " - " + str(cmd_result) cmd = 'ifconfig wlan0 ' cmd_result = os.system(cmd) print cmd + " - " + str(cmd_result) p = subprocess.Popen(['hostname', '-I'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) out , err = p.communicate() if out: ip_address = out else: ip_address = "<Not Set> " return ip_address def ssid_discovered(): Cells = Cell.all('wlan0') wifi_info = 'Ssid gefunden: \n' für aktuell in range(len(Cells)): wifi_info += Cells[current].ssid + "\ n" wifi_info+="!" print wifi_info return wifi_info def handle_client(client_sock) : # get ssid client_sock.send(ssid_discovered()) print "Waiting for SSID..." ssid = client_sock.recv(1024) if ssid == ' ' : return print "ssid empfangen" print ssid # get psk client_sock.send("waiting-psk!") print "Waiting for PSK..." psk = client_sock.recv(1024) if psk == '' : return print "psk empfangen" print psk ip_address = wifi_connect(ssid, psk) print "ip address: " + ip_address client_sock.send("ip-address:" + ip_address + "!") return try: while True: server_sock=BluetoothSocket( RFCOMM ) server_sock.bind(("",PORT_ANY)) server_sock.listen(1) port = server_sock.getsockname()[1] uuid = "815425a5-bfac-47bf-9321-c5ff980b5e11" Advertise_service( server_sock, "RPi Wifi config" , service_id = uuid, service_classes = [ uuid, SERIAL_PORT_CLASS ], Profile = [ SERIAL_PORT_PROFILE ]) print „Warten auf Verbindung auf RFCOMM-Kanal %d“ % Port client_sock, client_info = server_sock.accept() print „Akzeptierte Verbindung von“, client_info handle_client (client_sock) client_sock.close() server_sock.close() # abgeschlossene Konfiguration print 'Fertiggestellte Konfiguration\n' außer (KeyboardInterrupt, SystemExit): print '\nExiting\n'

5. Nach dem obigen Schritt ist es an der Zeit, das Skript ausführbar zu machen, indem Sie die erforderlichen Berechtigungen erteilen:

$ chmod +x run.py

Ausführen:

$ sudo ./run.py

6. Öffnen Sie nun die Android-App und wählen Sie den RaspberryPi in den über Bluetooth gekoppelten Geräten aus. Geben Sie SSID und PSK und klicken Sie auf die „Konfiguration starten“ . Innerhalb weniger Sekunden sollte das WLAN des Raspberry Pi verbunden sein, wie in den Bildern unten gezeigt.

7. Um das Skript während des Startvorgangs des Pi auszuführen, bearbeiten Sie /etc/rc.local und fügen Sie die folgende Codezeile hinzu:

(sleep 10;/path/to/script/./run.py)&

3. Einrichten des DHT22-Sensors – Hardware

1. Stellen Sie die richtigen Verbindungen her, wie im Diagramm unten dargestellt:

4. Einrichten des DHT22-Sensors – Software

1. Installieren Sie die erforderlichen Pakete, indem Sie die folgenden Befehle ausführen:

$ sudo apt-get update
$ sudo apt-get install build-essential python-dev python-openssl git

2. Laden Sie die Sensorbibliothek. In meinem Fall verwende ich eine vorgefertigte Adafruit-Bibliothek, die eine Vielzahl von Sensoren unterstützt:

$ Git-Klon https://github.com/adafruit/Adafruit_Python_DHT.git && cd Adafruit_Python_DHT

3. Wenn die Bibliothek bereits geladen ist, führen Sie den folgenden Befehl aus, um eine Python-Bibliothek zu erstellen, mit der Sie die Integration für dieses und weitere Projekte problemlos durchführen können.

$ sudo python setup.py installieren

4. Wenn alles richtig läuft, sollten wir die Temperatur und Luftfeuchtigkeit ablesen können. Am einfachsten ist es, zunächst die bereits in unserem Pi vorhandenen Demodateien zu nutzen:

$ cd-Beispiele

5. Führen Sie den folgenden Beispielcode aus. Dabei gibt der erste Parameter (11) an, welcher Sensor verwendet wurde (22 für den DHT22) und der zweite, mit welchem ​​GPIO er verbunden ist (nicht die Pin-Nummer, sondern die GPIO-Nummer). Dies erzeugt eine Ausgabe wie die folgende:

$ sudo ./AdafruitDHT.py 11 4

Erwartetes Ergebnis:

$ sudo ./AdafruitDHT.py 11 4 Temp=24,0* Luftfeuchtigkeit=41,0 %

5. Übermittlung von Daten an Ubidots

1. Erstellen Sie mit dem Nano-Editor ein Python-Skript und fügen Sie den folgenden Code in das Terminal ein. Fügen Sie dazu den folgenden Befehl ein:

$ sudo nano ubidots 3.py

Quellcode:

Importzeit Importanfragen Import Mathematik Import Zufallsimport Systemimport Adafruit_DHT Sensor = 22 #Wählen Sie Ihre DHT-Version Pin = 18 #Geben Sie Ihre DHT22-PIN ein TOKEN = „…“ # Geben Sie hier Ihr TOKEN ein DEVICE_LABEL = „Raspberrypi“ # Geben Sie hier Ihr Geräteetikett ein VARIABLE_LABEL_1 = „Temperatur“ # Geben Sie hier Ihre erste Variablenbeschriftung ein. VARIABLE_LABEL_2 = „Luftfeuchtigkeit“ # Geben Sie hier Ihre zweite Variablenbeschriftung ein. # Versuchen Sie, einen Sensormesswert zu erfassen. Verwenden Sie die Methode read_retry, die bis zu # bis 15 Mal versucht, einen Sensormesswert zu erhalten (wobei zwischen jedem Wiederholungsversuch 2 Sekunden gewartet wird). Luftfeuchtigkeit, Temperatur = Adafruit_DHT.read_retry(sensor, pin) # Kommentieren Sie die Zeile unten aus, um die Temperatur in Fahrenheit umzuwandeln. # Temperatur = Temperatur * 9/5.0 + 32 # Beachten Sie, dass Sie manchmal keinen Messwert erhalten und # die Ergebnisse null sind (da Linux den Zeitpunkt von Aufrufen zum Auslesen des Sensors nicht # garantieren kann). # Wenn dies passiert, versuchen Sie es erneut! def build_payload(variable_1, variable_2): # Erstellt zwei Zufallswerte zum Senden von Daten value_1 = Temperatur value_2 = Luftfeuchtigkeit payload = {variable_1: value_1, variable_2: value_2, } return payload def post_request(payload): # Erstellt die Header für die HTTP-Anfragen url = "http://industrial.api. ubidots .com" url = "{}/api/v1.6/devices/{}".format(url, DEVICE_LABEL) headers = {"X-Auth-Token": TOKEN, "Content-Type": "application/json"} # Macht den HTTP-Anforderungsstatus = 400 Versuche = 0, während der Status >= 400 und Versuche <= 5 sind: req = request.post(url=url, headers=headers, json=payload) status = req.status_code versucht += 1 time.sleep(1) # Verarbeitet Ergebnisse, wenn Status >= 400: print("[FEHLER] Daten konnten nach 5 Versuchen nicht gesendet werden, bitte überprüfen Sie Ihre Token-Anmeldeinformationen und Ihre Internetverbindung Verbindung") return False print("[INFO]-Anfrage ordnungsgemäß durchgeführt, Ihr Gerät wurde aktualisiert") return True def main(): payload = build_payload( VARIABLE_LABEL_1, VARIABLE_LABEL_2) print("[INFO] Versucht, Daten zu senden") post_request( payload) print("[INFO] done") if __name__ == '__main__': while (True): print('Temp={0:0.1f}* Humidity={1:0.1f}%'.format(temperature , Luftfeuchtigkeit)) Luftfeuchtigkeit, Temperatur = Adafruit_DHT.read_retry(sensor, pin) main() time.sleep(1) ```

Nach dem Einfügen des Quellcodes müssen Sie das Ubidots TOKEN , wo es im Python-Skript angegeben ist:

$ sudo nano ubidots 3.py

2. Nachdem alles konfiguriert ist, können Sie den Beispielcode ausführen, um mit der Datenübertragung an Ihr Ubidots -Konto zu beginnen:

$ sudo python ubidots 3.py

Wenn Sie an dieser Stelle den Abschnitt „Geräte“ Ihres Ubidots -Kontos aufrufen, können Sie ein neu erstelltes Gerät mit dem Namen „RaspberryPi“ sehen.

3. Um Ihre Daten effizient zu visualisieren, richten wir ein Ubidots - Dashboard . Um es zu erstellen, gehen Sie zum Dashboard (Daten > Dashboard ).

4. Klicken Sie dann auf „ Neues Widget hinzufügen “ und wählen Sie Ihr Widget aus:

5. Wählen Sie die anzuzeigende Variable aus:

6. Geben Sie dem Widget einen benutzerdefinierten Namen und klicken Sie auf das grüne Symbol, um die Widget-Erstellung abzuschließen.

IoT Anwendungsentwicklungsplattform Ubidots können Sie jetzt Variablen von jedem Ort aus fernüberwachen :

Empfohlene Artikel: