Benötigte Software:
Ablauf:
get.exe
ausführen. Nachher finden sich im Verzeichnis die Dateien “esptool.exe” und “esptool.py”esptool --port COM4 erase_flash
(COM4 durch Port an dem ESP hängt ersetzen). Der COM Port kann im Device Manager gefunden werden: Windows+R → devmgmt.msc und Enter um dann zu Ports (COM und LPT) runterzuscrollen und Portnummer ablesen. Achtung: esptool ist nicht im Pfad, das heisst, es kann nur im Verzeichnis ausgeführt werden, in welchem es liegt. Alternativ kann das Verzeichnis in welchem die Datei esptool liegt dem Pfad (%PATH%) hinzugefügt werden.)
esptool --chip esp32 --port COM4 write_flash -z 0x1000 C:\Users\username\Downloads\esp32-20180313-v1.9.3-453-gbdc875e6.bin
(idem Port ersetzen, Pfad ersetzen zum heruntergeladenen Ort)
print(“Hello World”)
die Welt begrüssen. Putty wieder schliessen, wenn anderweitig auf den ESP (z.B. mit ampy) zugegriffen werden soll.pip
installiert werden. Am einfachsten: pip install adafruit-ampy
im Ordner (typischerweise C:\python27\scripts) aus der Kommandozeile (Windows+R → cmd) aufrufen, in dem die Datei pip.exe
liegt.main.py
auf ESP32 (an COM4) hochladen: ampy --port COM4 put main.py
main.py
von ESP32 (an COM4) runterladen: ampy --port COM4 get main.py
Als Test kann die Datei main.py hochgeladen werden. Diese testet die LED-Streifen. main.py
ist die Datei, die immer automatisch ausgeführt wird.
screen /dev/ttyUSB5 115200
CTRL-a K (oder CTRL-a :quit)
ampy --port /dev/ttyUSB0 run blink.py
Anstatt run auch put, rm
Easy peasy
import machine import neopixel np = neopixel.NeoPixel(machine.Pin(2), 150) i=0; while True: np[i] = (100,20,50) np[(i+149)%150] = (0,0,0) np.write() i=(i+1)%150
import machine import mcp import time from machine import I2C i2c=I2C(sda=machine.Pin(23), scl=machine.Pin(22)) reg=bytearray(1) a = 0x20 reg[0]=0xff i2c.writeto_mem(a, 0x01, reg) # All Input Register B i2c.writeto_mem(a, 0x0d, reg) # All Pullups Register B # Note: Man könnte die Polarität ändern, und so die GPIO-Bits invertieren # i2c.writeto_mem(a, 0x03, reg) reg[0]=0x00 i2c.writeto_mem(a, 0x00, reg) # All Output Register A # GPIO 0x12 (A), 0x13 (B) rega=bytearray(1) regb=bytearray(1) old = 0 while True: rega[0]=(rega[0]+1)%256 i2c.writeto_mem(a, 0x12, rega) # Write to GPIOA i2c.readfrom_mem_into(a, 0x13,regb) # Read from GPIOB if (regb[0]!=old): print(bin(regb[0])) old=regb[0] # time.sleep_ms(100)
Siehe https://techtutorialsx.com/2017/09/01/esp32-micropython-http-webserver-with-picoweb/
import network def connect(): ssid = "stopbupf" password = "stopbuepf" station = network.WLAN(network.STA_IF) if station.isconnected() == True: print("Already connected") return station.active(True) station.connect(ssid, password) while station.isconnected() == False: pass print("Connection successful") print(station.ifconfig()) connect()
0b(R)(L)(X)(A)(→)(←)(V)(^)(Start)(Select)(Y)(B)
import machine import time # Interfacing a SNES-Controller with Micropython on ESP32 # Clock, Latch, Data, according to # https://gamefaqs.gamespot.com/snes/916396-super-nintendo/faqs/5395 # # Some colors do not match. Mine where # white : 5V # blue : Clock (in website yellow) # yellow : Latch (in webseite orange) # red : Data # brown : GND # # # Wiring: Clock and Latch can be directly connected to the ESP32 # Do not use Pin 12 (used to determine voltage at boot, it seems) # # To connect Data, you must use a level-converter (or a voltage divider # might do the trick # clk = machine.Pin(13, machine.Pin.OUT) clk.value(1) lat = machine.Pin(14, machine.Pin.OUT) lat.value(0) dat = machine.Pin(27, machine.Pin.IN) while True: # Init: Lat for 12us high lat.value(1) time.sleep_us(12) lat.value(0) # Get values time.sleep_us(12) buttons = 0 for b in range(16): clk.value(0) buttons |= ((1-dat.value()) << b) time.sleep_us(6) clk.value(1) time.sleep_us(6) print(bin(buttons)) time.sleep_ms(100)
Idee: Einer bietet einen Accesspoint an, der andere verbindet sich darauf. Danach können beide via TCP kommunizieren. Das ginge auch mit mehreren Teilnehmern.
# See https://docs.micropython.org/en/latest/esp8266/library/network.html import network # Access-Point aktivieren und konfigurieren ap = network.WLAN(network.AP_IF) ap.active(True) ap.config(essid='esp32', authmode=0) ap.ifconfig(('10.42.42.1', '255.255.255.0', '10.42.42.1', '10.42.42.1')) # Auf Port 80 Verbindungen annehmen (hier auf Port 80, eigentlich für http reserviert) import socket addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1] s = socket.socket() s.bind(addr) s.listen(1) # Auf eingehenden Verbindung warten, und Kommunikationskanal etablieren. cl, addr = s.accept() print('client connected from', addr) cl_file = cl.makefile('rwb', 0) while True: # Eingehende Zeile lesen line = cl_file.readline() print(line) # Antwort senden cl.send(b"OK! Recieved "+line) if not line or line == b'\r\n': break # Verbindung wieder schliessen cl.close()
# See https://docs.micropython.org/en/latest/esp8266/library/network.html import network import utime # Sich mit dem WLAN verbinden wlan = network.WLAN(network.STA_IF) wlan.active(True) wlan.connect('esp32') while not wlan.isconnected(): print(wlan.status()) utime.sleep(1) # 1 second sleep import usocket as socket # Auf diese IP und Port verbinden addr = socket.getaddrinfo('10.42.42.1', 80)[0][-1] s = socket.socket() s.connect(addr) # Etwas senden s.send(b'Hello from '+wlan.ifconfig()[0]+b"\r\n") # Antwort einlesen data = s.recv(1000) print(data) # Verbindung beenden s.close()
UDP für “Bildübertragung”: https://www.dfrobot.com/blog-608.html