Sonntag, 10. Mai 2020

Esp8266 programmieren - first steps und hello world

Im letzten Post hab ich beschrieben wie man ein micropython image auf den Controller kopiert und Kontakt mit dem micropython Interpreter mittels USB aufnimmt. Aber da gibt es mehr zu wissen.

Der ESP8266 startet automatisch einen Access Point, wenn man nach dem Reset (oder einfach USB Kabel ziehen) die Access Point Liste anschaut wir man einen neuen finden.

Unter Linux kann man sich die Daten zu den Access Point wie folgt anschauen

sudo iwlist wlp4s0 scanning

der passenden AP Eintrag schaut bei mir so aus

          Cell 02 - Address: 52:02:91:4E:F1:45
                    Channel:1
                    Frequency:2.412 GHz (Channel 1)
                    Quality=70/70  Signal level=-23 dBm 
                    Encryption key:on
                    ESSID:"MicroPython-4ef145"
                    Bit Rates:5.5 Mb/s; 11 Mb/s; 1 Mb/s; 2 Mb/s; 6 Mb/s
                              12 Mb/s; 24 Mb/s; 48 Mb/s
                    Bit Rates:54 Mb/s; 9 Mb/s; 18 Mb/s; 36 Mb/s
                    Mode:Master
                    Extra:tsf=000000002a90af71
                    Extra: Last beacon: 5944ms ago
                    IE: Unknown: 00124D6963726F507974686F6E2D346566313435
                    IE: Unknown: 01088B9682840C183060
                    IE: Unknown: 030101
                    IE: Unknown: 32046C122448
                    IE: Unknown: DD0918FE34030100000000
                    IE: IEEE 802.11i/WPA2 Version 1
                        Group Cipher : TKIP
                        Pairwise Ciphers (2) : CCMP TKIP
                        Authentication Suites (1) : PSK
                    IE: WPA Version 1
                        Group Cipher : TKIP
                        Pairwise Ciphers (2) : CCMP TKIP
                        Authentication Suites (1) : PSK


Mit dem kann man sich ganz einfach verbinden.
Der ESP8266 verfügt über zwei getrennte WLAN Module (oder so ähnlich), man kann also als Client als aus als Access Point gleichzeitig auftreten. Das ist eine ganz tolle Funktion, wenn man z.B. einen WLAN Repeater bauen möchte.

ACHTUNG: will man das aber nicht, dass der ESP8266 einen Access Point startet, so muss man das explizit so festlegen. 

Aber zuerst mal das Hello World in der Microcontroller Welt: Eine LED blinken lassen.
Glücklicherweise ist auf dem ESP8266 schon eine LED drauf, angeschlossen ist diese fest über den Port 2. An der Elektronik muss man als für das Hello World noch gar nichts machen.

Also mittels screen über USB Kontakt zum Controller aufbauen, dann folgendes eintippen.

>>> from machine import Pin
>>>
>>> led = Pin(2, Pin.OUT)
>>> led.on()  # die LED geht aus, aber OK

>>> led.off()  # die LED geht wieder an

Das mit dem vertauschten ON OFF hat mit der Verkabelung der LED zu tun, ist sie entweder zwischen PIN2 und Vcc (ON = Led ist dunkel, OFF Led ist hell) oder zwischen PIN2 und GND (ON = Led ist hell, OFF = Led ist dunkel)

So direkt mit dem python Interpreter was machen ist zwar für kleinere Dinge sicher nett, aber sicher nicht das was man meistens möchte. Besser ist  es sein Programm in einer Datei abzuspeichern und dieses automatisch mit dem Controller zu starten.

Micropython startet die Datei main.py, wenn es diese auf dem Filesystem findet.

Hier mal die Datei hello_world.py

import time
# mpython specific modules
import machine
import network
def disable_ap():
    """
    per default micropython will enable an AP SSID
    this short function will disable AP Mode on startup
    for more information go to
    http://docs.micropython.org/en/v1.8.7/esp8266/esp8266/tutorial/network_basics.html
    """
    ap_if = network.WLAN(network.AP_IF)
    ap_if.active(False)
def main():
    # do some work
    led = machine.Pin(2, machine.Pin.OUT)
    while True:
        led.on()  # die LED geht aus, aber OK
        time.sleep(1)
        led.off()  # die LED geht wieder an
        time.sleep(1)
if __name__ == "__main__":
    disable_ap()  # disable access point
    while True:
        try:
            main()
        except:
            pass  # ignore exception
        finally:
            time.sleep(60) # wait 60s and try again

In dem Programm ist auch schon der Abschnitt drinnen, der den AP Modus daktiviert.

Damit das flashen von Micropython und das kopieren der Datei auf den Controller als main.py etwas einfach gestaltet, verwendet ich ein Bash script flash_mpython.py

Achtung: das script flash_mpython.py muss man mit sudo ausführen

#!/bin/bash
PORT=/dev/ttyUSB0
esptool.py --port $PORT erase_flash
esptool.py --port $PORT --baud 460800 write_flash --flash_size=detect --verify -fm dio 0x0 esp8266-20190529-v1.11.bin
echo "sleeping for 10s to wait for reset"
sleep 10
ampy -b 115200 -p $PORT put hello_world.py main.py
screen $PORT 115200


Wenn alles durchläuft, so kann man den Controller kurz vom USB trennen dann wieder einstecken und nach ein paar Sekunden sollte die LED anfangen zu blinken.



 

Keine Kommentare:

Kommentar veröffentlichen

OpenWRT 19 und ein Edimax USB WLAN Adapter

Ich kam gerade in die Verlegenheit einen Rapsberry B+ (das erste Modell) als Open-WRT Router für Outdoor neu zu installieren und wollte dabe...