8. Web-App mit @Anvil erstellen¶
In diesem Projekt ermöglichen wir eine bidirektionale Kommunikation zwischen dem Raspberry Pi Pico W und den Anvil-Servern. Die vom Pico W gesendeten Temperatur- und Feuchtigkeitsdaten werden in Echtzeit in Anvil angezeigt. Darüber hinaus können Sie Nachrichten in Anvil eingeben, die auf dem I2C LCD1602 des Pico W dargestellt werden.
1. Benötigte Komponenten
Für dieses Projekt benötigen wir folgende Bauteile.
Ein vollständiges Kit ist definitiv praktisch. Hier ist der entsprechende Link:
Bezeichnung |
INHALT DES KITS |
LINK |
---|---|---|
Kepler Kit |
450+ |
Sie können die Komponenten natürlich auch einzeln über die untenstehenden Links erwerben.
SN |
KOMPONENTE |
ANZAHL |
LINK |
---|---|---|---|
1 |
1 |
||
2 |
Micro-USB-Kabel |
1 |
|
3 |
1 |
||
4 |
Mehrere |
||
5 |
1 |
||
6 |
1 |
||
7 |
1 |
||
8 |
18650 Batterie |
1 |
|
9 |
Batteriehalter |
1 |
2. Schaltung aufbauen
Warnung
Achten Sie darauf, dass Ihr Li-Po-Lademodul gemäß dem Schaltplan angeschlossen ist. Andernfalls besteht die Gefahr eines Kurzschlusses, der Ihre Batterie und die Schaltung beschädigen könnte.
3. Eine Anvil-App erstellen
Besuchen Sie Anvil website und klicken Sie auf Jetzt entwickeln.
Melden Sie sich an oder registrieren Sie sich.
Erstellen Sie eine Neue leere App.
Wählen Sie das Material Design Theme aus.
Nun befinden Sie sich auf der App-Bearbeitungsseite.
Ziehen Sie ein Label-Werkzeug aus der Toolbox und platzieren Sie es auf Titel hier ablegen.
Den Label-Text können Sie im Text-Feld unter dem Menüpunkt Eigenschaften eingeben.
Ebenso ziehen Sie ein Textfeld nach rechts.
Ziehen Sie einen Button ganz nach rechts und passen Sie das Text-Feld an. Dieser Button wird zum „Senden“ einer Nachricht an den Raspberry Pi Pico W verwendet.
Nach einem Doppelklick auf den SHOW-Button wechselt das Formular von der Design-Seite zur Code-Seite und hebt den Code für den Button hervor. Fügen Sie den folgenden Code ein, um eine Funktion auf dem Server (in diesem Fall Pico W) aufzurufen.
anvil.server.call_s("show_message",self.text_box_1.text)
show_message
ist die Funktion, die programmiert wird, wenn der Pico W programmiert wird.self.text_box_1.text
ist die Nachricht, die Sie im Textfeld eingeben und die anshow_message()
weitergeleitet wird.
Wechseln Sie zurück zur Design-Seite, ziehen Sie ein weiteres Label und platzieren Sie es unter den vorherigen Elementen. Dieses Label wird die DHT11-Sensordaten vom Pico W anzeigen.
Klicken Sie in der Toolbox auf Weitere Komponenten und ziehen Sie den Timer in das Formular.
Setzen Sie den Timer im Menü Eigenschaften auf ein Intervall von 3 Sekunden. Diese Zeit wird verwendet, um den Bildschirm für unsere Sensordaten zu aktualisieren.
Doppelklicken Sie auf das Timer-Werkzeug, um es zu programmieren. Verwenden Sie die Funktion
anvil.server.call_s()
um die Funktionpublish_data()
vom Server aufzurufen und die anzuzeigende Nachricht in der Anvil-App abzurufen. Weisen Sie diese der Variablenself.label_2.text
zu und Sie sind fertig.data=anvil.server.call_s("publish_data") self.label_2.text=data
Damit ist der Anvil-Programmteil abgeschlossen. Weitere Details zur Verwendung von Anvil finden Sie unter Anvil Docs.
4. Pico W einrichten
Um die Verbindung des Raspberry Pi Pico W zu den Anvil-Diensten zu vereinfachen, verwendet Anvil ein spezielles Firmware-Image. Die Firmware des Pico W ist in MicroPython geschrieben und erscheint als USB-Laufwerk mit zwei Dateien (boot.py und main.py). Vor dem Schreiben des Codes muss der Pico W mit der angepassten Firmware geflasht und mit unserem WLAN verbunden werden.
Laden Sie die spezielle Firmware für den Raspberry Pi Pico W firmware from Anvil herunter. Es wird empfohlen, die vollständige Version herunterzuladen.
Halten Sie die BOOTSEL-Taste am Pico W gedrückt und schließen Sie das Gerät über ein Micro-USB-Kabel an Ihren Computer an. Lassen Sie die BOOTSEL-Taste los, sobald das Laufwerk RPI-RP2 auf Ihrem Computer erscheint.
Ziehen Sie die gerade heruntergeladene
.uf2
-Datei hinein. Der Pico W wird nun die Firmware installieren. Sobald der Vorgang abgeschlossen ist, wird das Laufwerk neu geladen und Sie sehen die Dateienmain.py
undboot.py
.Bemerkung
Erstellen Sie vor dem erneuten Flashen der Firmware eine Sicherung aller wichtigen Dateien auf dem Pico W.
Wählen Sie in der Thonny IDE „MicroPython(Raspberry Pi Pico).COMXX“ als Interpreter aus. Nachdem Sie auf Ansicht -> Dateien geklickt haben, sehen Sie das lokale Laufwerk und das Laufwerk des Raspberry Pi Pico.
Doppelklicken Sie auf das
boot.py
-Skript und tragen Sie dieSSID
und dasPASSWORT
Ihres WLANs ein.
5. Code vervollständigen
Laden Sie
dht.py
undlcd1602.py
aus dem Verzeichniskepler-kit-main/libs
auf den Raspberry Pi Pico W hoch.Öffnen Sie
main.py
und ersetzen Sie den vorhandenen Code durch den folgenden Code.import anvil.pico import uasyncio as a from machine import Pin,I2C from lcd1602 import LCD lcd = LCD() from dht import DHT11 sensor = DHT11(Pin(16, Pin.OUT, Pin.PULL_DOWN)) UPLINK_KEY = "<uplink_key_goes_here>" @anvil.pico.callable(is_async=True) async def show_message(text): print(f"show anvil's input message: {text}") lcd.clear() lcd.message(text) return @anvil.pico.callable(is_async=True) async def publish_data(): sensor.measure() return "Temperature: {}, Humidity: {}".format(sensor.temperature, sensor.humidity) # Connect the Anvil Uplink. In MicroPython, this call will block forever. anvil.pico.connect(UPLINK_KEY) # There's lots more you can do with Anvil on your Pico W. # # See https://anvil.works/pico for more information
Kehren Sie zur Anvil-Oberfläche zurück und wählen Sie die Uplink-Option in den App-Browser-Einstellungen.
Klicken Sie auf Den Anvil Server Uplink für diese App aktivieren, um den Uplink-Schlüssel zu erhalten.
Kopieren Sie diesen und ersetzen Sie damit
<uplink_key_goes_here>
inmain.py
, damit Ihr Pico W sich mit der von Ihnen erstellten Anvil-App verbinden kann.
6. Das Projekt ausführen
Klicken Sie auf die Schaltfläche Aktuelles Skript ausführen oder drücken Sie F5. Nach erfolgreicher Verbindung sehen Sie in der Shell eine Meldung, die den erfolgreichen Verbindungsaufbau bestätigt.
Starten Sie Anvil. Nun können Sie die Temperatur und Luftfeuchtigkeit über die Anvil-App ablesen. Wenn Sie eine Nachricht in das Textfeld eingeben und dann auf die Schaltfläche ANZEIGEN klicken, wird die eingegebene Nachricht auf dem I2C LCD1602 angezeigt.
Bemerkung
Falls die eingegebenen Zeichen nicht auf dem I2C LCD1602 angezeigt werden, können Sie das Potentiometer auf der Rückseite des Moduls drehen, um den Kontrast zu erhöhen.
7. App veröffentlichen
Wenn Sie Ihre selbst erstellte App teilen möchten, können Sie einen Freigabelink wie folgt generieren.
Kehren Sie zur Anvil-Seite zurück und klicken Sie auf die Option App veröffentlichen in den App-Browser-Einstellungen.
Im Tab Über privaten Link teilen sehen Sie eine Liste von Links. Über diesen Link kann jeder auf Ihre App zugreifen.
Greifen Sie auf den Link zu und Ihre App ist direkt einsatzbereit.
Sie können Ihre App auch über einen öffentlichen Link teilen. Geben Sie dazu Ihren personalisierten Domainnamen ein und klicken Sie unten auf Anwenden, um die Änderung wirksam zu machen.
Wie funktioniert es?
Hier ist das Grundgerüst von main.py
, welches die Basis für die Kommunikation zwischen Pico W und der Anvil-App bildet.
import anvil.pico
import uasyncio as a
UPLINK_KEY = "<uplink_key_goes_here>"
# Connect the Anvil Uplink. In MicroPython, this call will block forever.
anvil.pico.connect(UPLINK_KEY)
# There's lots more you can do with Anvil on your Pico W.
#
# See https://anvil.works/pico for more information
Konfigurieren Sie dht11 und lcd1602. Details zur Verwendung dieser beiden Komponenten finden Sie unter 6.2 Temperatur - Feuchtigkeit und 3.4 Flüssigkristallanzeige.
from machine import Pin,I2C
from lcd1602 import LCD
lcd = LCD()
from dht import DHT11
sensor = DHT11(Pin(16, Pin.OUT, Pin.PULL_DOWN))
Im Anvil-Code haben wir zwei interne Funktionen des Servers (Pico W) aufgerufen.
Die erste ist show_message()
, deren Aufgabe es ist, die von Anvil eingegebene Nachricht auf dem LCD anzuzeigen.
Der Dekorator @anvil.pico.callable(is_async=True)
macht diese Funktion für Anvil aufrufbar.
@anvil.pico.callable(is_async=True)
async def show_message(text):
print(f"show anvil's input message: {text}")
lcd.clear()
lcd.message(text)
return
Als Nächstes kommt publish_data()
, die dazu dient, den Wert des DHT11 zu ermitteln und die Temperatur und Luftfeuchtigkeit an Anvil zurückzugeben.
Auch hier wird der Dekorator @anvil.pico.callable(is_async=True)
verwendet, um die Funktion für Anvil aufrufbar zu machen.
@anvil.pico.callable(is_async=True)
async def publish_data():
sensor.measure()
return "Temperature: {}, Humidity: {}".format(sensor.temperature, sensor.humidity)