1 Der AirLift-Coprozessor
In diesem Kurs lernst du, wie du mit Hilfe eines AirLift-FeatherWing eine Verbindung ins Internet herstellen kannst. Da dein Feather-Board keine WLAN-Schnittstelle hat, benötigst du einen Coprozessor, der eine Verbindung zu einem WLAN herstellen kann. Das AirLift-FeatherWing ist mit einem Prozessort mit dem Namen ESP32 ausgestattet. Um deinen Feather mit diesem FeatherWing zu verbinden benötigst du außerdem einen FeatherWing Doubler oder FeatherWing Tripler und du musst dir einen Account auf Adafruit IO anlegen.
Aufbau
Stecke den Feather Sense und den Feather-AirLift in den Trippler und verbinde das Board per Micro-USB-Kabel mit deinem PC. Das wars schon von der Hardwareseite.
Adafruit IO
Registriere dich auf Adafruit IO mit deiner E-Mail-Adresse und denke dir ein sicheres Passwort aus. Nachdem du deine E-Mail-Adresse bestätigt und dich angemeldet hast, klicke ganz oben auf der Seite auf den Link IO und anschließen auf Feeds. Erstelle jetzt einen neuen Feed indem du auf + New Feed klickst. Gib deinem Feed den Namen test und klicke auf Create. Wähle nun den feed test aus indem du ihn in der Liste auswählst.

Dein Adafruit IO Key
Du benötigst nun noch deinen Adafruit-IO-Schlüssel. Klickst du oben im Menüband auf das Schlüsselsymbol, öffnet sich ein Fenster mit deinem Active Key. Das ist dein IO-Key. Diesen benötigst du im nächsten Schritt.

Deine geheimen Zugangsdaten
Lege eine neue Datei mit dem Namen secrets.py
an und kopiere den folgenden Code. Trage den Namen deines WLAN-Netzwerks und dem WLAN-Passwort sowie deinen Adafruit-Benutzernamen und den IO-Key zwischen den Hochkommata ein und vergiss nicht die Datei zu speichern. Wenn alles stimmt, kannst du diese jetzt schließen.
secrets = {
'ssid' : 'Meine WLAN SSID',
'password' : 'Mein WLAN Passwort',
'aio_username' : 'mein-adafruit-benutzernamen',
'aio_key' : 'mein-Active-Key',
}
2 Eine Internetverbindung herstellen
Um zu überprüfen, ob das AirLift-Board funktioniert, können wir uns eine Liste mit allen WLAN-Netzwerken in der Umgebung ausgeben lassen. Erstelle eine neue Datei mit dem Namen wlan_suche.py und kopiere den folgenden Code. Teste, ob in der seriellen Konsole die Netzwerke, die auch dein Smartphone anzeigt, gefunden werden und fahre erst dann mit der nächsten Seite fort. Falls es hier zu Fehlern kommt, müssen diese zu erst gefixt werden. Schau in diesem Fall auf den unten verlinkten Seiten nach und komme erst dann hierher zurück.
import board
import busio
from digitalio import DigitalInOut
from adafruit_esp32spi import adafruit_esp32spi
print("ESP32 SPI hardware test")
esp32_cs = DigitalInOut(board.D13)
esp32_ready = DigitalInOut(board.D11)
esp32_reset = DigitalInOut(board.D12)
spi = busio.SPI(board.SCK, board.MOSI, board.MISO)
esp = adafruit_esp32spi.ESP_SPIcontrol(spi, esp32_cs, esp32_ready, esp32_reset)
if esp.status == adafruit_esp32spi.WL_IDLE_STATUS:
print("ESP32 found and in idle mode")
print("Firmware vers.", esp.firmware_version)
print("MAC addr:", [hex(i) for i in esp.MAC_address])
for ap in esp.scan_networks():
print("\t%s\t\tRSSI: %d" % (str(ap['ssid'], 'utf-8'), ap['rssi']))
print("Done!")
Weiterführende Links
3 Verbindung zu Adafruit IO herstellen
Nun wollen wir erstmalig Daten ins Internet übertragen. Dazu nutzen wir den Feed test
, den wir im Browser beobachten. Kopiere den Code in eine neue Datei mit dem Namen wlan-aio.py. In Zeile 37 steht der Name des feeds. In unserem Falle test
. Vergiss nicht, die Datei in der code.py zu importieren.
1import time
2import board
3import busio
4from digitalio import DigitalInOut
5import neopixel
6from adafruit_esp32spi import adafruit_esp32spi
7from adafruit_esp32spi import adafruit_esp32spi_wifimanager
8
9print("ESP32 SPI webclient test")
10
11# Get wifi details and more from a secrets.py file
12try:
13 from secrets import secrets
14except ImportError:
15 print("WiFi secrets are kept in secrets.py, please add them there!")
16 raise
17
18esp32_cs = DigitalInOut(board.D13)
19esp32_ready = DigitalInOut(board.D11)
20esp32_reset = DigitalInOut(board.D12)
21
22spi = busio.SPI(board.SCK, board.MOSI, board.MISO)
23esp = adafruit_esp32spi.ESP_SPIcontrol(spi, esp32_cs, esp32_ready, esp32_reset)
24
25status_light = neopixel.NeoPixel(
26 board.NEOPIXEL, 1, brightness=0.2
27)
28
29wifi = adafruit_esp32spi_wifimanager.ESPSPI_WiFiManager(esp, secrets, status_light)
30
31counter = 0
32
33while True:
34 try:
35 print("Posting data...", end="")
36 data = counter
37 feed = "test"
38 payload = {"value": data}
39 response = wifi.post(
40 "https://io.adafruit.com/api/v2/"
41 + secrets["aio_username"]
42 + "/feeds/"
43 + feed
44 + "/data",
45 json=payload,
46 headers={"X-AIO-KEY": secrets["aio_key"]},
47 )
48 print(response.json())
49 response.close()
50 counter = counter + 1
51 print("OK")
52 except OSError as e:
53 print("Failed to get data, retrying\n", e)
54 wifi.reset()
55 continue
56 response = None
57 time.sleep(15)
Wenn alles klappt, dann solltest du in deinem feed erkennen, dass ein Zahl, die ständig erhöht wird ankommt. Diese Zahl hat den langen und beschwerlichen Weg durch dein WLAN, anschließend durch das Internet zum Adafruit-Server in Amerika und von dort zurück über den Großen Teich in dein Browserfenster zurückgelegt. Ist das nicht großartig.

Was passiert eigentlich, wenn du das Programm neu startest? Und warum sollte es bei einer langweilige Zahl, die nur hochgezählt wird, bleiben? Versuche mal einen Sensorwert in einen neuen Feed zu übertragen! Wir wäre es mit der Raumtemperatur.