ESP8266-Workshop: Unterschied zwischen den Versionen

aus Metalab Wiki, dem offenen Zentrum für meta-disziplinäre Magier und technisch-kreative Enthusiasten.
Zur Navigation springenZur Suche springen
 
(8 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 60: Zeile 60:
 
* [http://esp.opentu.net/ WebREPL]
 
* [http://esp.opentu.net/ WebREPL]
 
* [https://docs.micropython.org/en/latest/esp8266/esp8266/tutorial/index.html Dokumentation]
 
* [https://docs.micropython.org/en/latest/esp8266/esp8266/tutorial/index.html Dokumentation]
 +
 +
= Workshop-Notizen =
 +
 +
== Pinout des Zusatzboards ==
 +
 +
{|
 +
|-
 +
! GPIO !! Funktion
 +
|-
 +
| 0 || Neopixel
 +
|-
 +
| 5 || rote LED
 +
|-
 +
| 13 || linker Button
 +
|-
 +
| 15 || rechter Button
 +
|}
 +
 +
Am ADC 0 hängt der Helligkeitssensor.
 +
 +
== Generell ==
 +
 +
Firmware flashen:
 +
 +
<pre>esptool.py.exe --port COM15 --baud 460800 write_flash --flash_size=detect 0 esp8266-20170612-v1.9.1.bin
 +
</pre>
 +
 +
COM15 durch den Port ersetzen (zB /dev/ttyUSB0 unter Linux).
 +
 +
Modul laden/entladen:
 +
 +
<pre>import meinmodul
 +
del meinmodul</pre>
 +
 +
== LED ansteuern ==
 +
 +
<pre>import machine
 +
pin = machine.Pin(5, machine.Pin.OUT)
 +
pin.value(0)
 +
pin.value(1)</pre>
 +
 +
== PWM ==
 +
 +
<pre>import machine
 +
pin = machine.Pin(5, machine.Pin.OUT)
 +
pwm = machine.PWM(pin)
 +
pwm.freq(5)
 +
pwm.duty(512)</pre>
 +
 +
== Button ==
 +
 +
<pre>import machine
 +
pin = machine.Pin(13, machine.Pin.IN)
 +
pin.value()</pre>
 +
 +
== Interrupts ==
 +
 +
<pre>from machine import Pin
 +
import utime
 +
def callback(p):
 +
led=Pin(5, Pin.OUT)
 +
led.value(0)
 +
utime.sleep_ms(100)
 +
led.value(1)
 +
pin = Pin(13, Pin.IN)
 +
pin.irq(trigger=Pin.IRQ_FALLING|Pin.IRQ_RISING, handler=callback)</pre>
 +
 +
== ADC (Helligkeitssensor) ==
 +
 +
<pre>import machine
 +
adc = machine.ADC(0)
 +
adc.read()</pre>
 +
 +
== Timer ==
 +
 +
<pre>import machine
 +
pin = machine.Pin(5, machine.Pin.OUT)
 +
adc = machine.ADC(0)
 +
def readsensor(t):
 +
pin.value(adc.read() < 800)
 +
tim = machine.Timer(-1)
 +
tim.init(period=100, mode=Timer.PERIODIC, callback=readsensor)</pre>
 +
 +
== Neopixel ==
 +
 +
<pre>import machine, neopixel
 +
np = neopixel.NeoPixel(machine.Pin(0), 1)
 +
np[0] = (255, 0, 0)
 +
np.write()</pre>
 +
 +
== Netzwerk ==
 +
 +
=== Setup (nur einmal notwendig!) ===
 +
 +
<pre>import network
 +
nic = network.WLAN(network.STA_IF)
 +
nic.active(True)
 +
nic.connect('metalab','')
 +
nic.ifconfig()
 +
import webrepl_setup</pre>
 +
 +
=== Sockets ===
 +
 +
<pre>import socket
 +
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 +
s.connect(("127.0.0.1", 1234))
 +
s.send("Hello World\n".encode('utf-8'))
 +
s.close()</pre>

Aktuelle Version vom 30. Juli 2017, 20:02 Uhr

Sprache: Deutsch
Subpages:
ESP8266-Workshop hat keine Unterseiten.


ESP8266-Workshop
Nodemcu.png
2017-07-30 19:00
Hauptraum
User:anlumo
Workshop
€7
planning
Introduction on using the ESP8266
Zuletzt aktualisiert: 30.07.2017


Was

Der ESP8266 ist ein kleiner Mikrocontroller, der frei programmiert werden kann und sehr günstig ist. Er hat auch WiFi eingebaut und kann damit für Internet-verbundene Projekte (IoT) verwendet werden.

Dieser Mikrocontroller ist auch sehr einfach zu programmieren. Der Workshop soll eine schnelle Einführung bieten, wie man beginnen kann, in diese Welt einzutauchen.

Plan

  • Vorstellung der Hardware
  • Flashen der Firmware
  • Installation von eigenen Programmen auf dem Gerät
  • Ansteuerung von externer Hardware (digital lesen und schreiben, analog lesen)
  • Interaktion mit dem Netzwerk

Ausrüstung

Es wird ein Hardware-Paket für den Workshop zur Verfügung gestellt, bei dem alles inkludiert ist, was benötigt wird. Dafür gibt es einen Unkostenbeitrag von €7. Es kann natürlich mit seiner eigenen Hardware gratis teilgenommen werden, einfach nur zuhören ist auch möglich.

Inhalt des Pakets:

  • Wemos D1-Modul
  • Micro USB-Kabel (20cm)
  • selbst designtes Aufsteckboard

Teilnehmende müssen weiters ein Notebook mitbringen, auf dem entwickelt werden kann. Alle Betriebssysteme sollten möglich sein.

Treiber für macOS gibts hier!

Unter Linux und Windows bitte schauen, dass python 2.7+ installiert ist, da das für die Tools benötigt wird.

Achtung: Bash for Windows kann nicht verwendet werden, da das keinen Zugriff auf serielle Schnittstellen hat!

Programmierumgebung/Programmiersprache

Als Firmware soll MicroPython eingesetzt werden, d.h. das Modul wird mit Python 3 programmiert.

Vorbereitung

pip install pyserial
pip install esptool

In-Workshop Linkliste

Workshop-Notizen

Pinout des Zusatzboards

GPIO Funktion
0 Neopixel
5 rote LED
13 linker Button
15 rechter Button

Am ADC 0 hängt der Helligkeitssensor.

Generell

Firmware flashen:

esptool.py.exe --port COM15 --baud 460800 write_flash --flash_size=detect 0 esp8266-20170612-v1.9.1.bin

COM15 durch den Port ersetzen (zB /dev/ttyUSB0 unter Linux).

Modul laden/entladen:

import meinmodul
del meinmodul

LED ansteuern

import machine
pin = machine.Pin(5, machine.Pin.OUT)
pin.value(0)
pin.value(1)

PWM

import machine
pin = machine.Pin(5, machine.Pin.OUT)
pwm = machine.PWM(pin)
pwm.freq(5)
pwm.duty(512)

Button

import machine
pin = machine.Pin(13, machine.Pin.IN)
pin.value()

Interrupts

from machine import Pin
import utime
def callback(p):
	led=Pin(5, Pin.OUT)
	led.value(0)
	utime.sleep_ms(100)
	led.value(1)
pin = Pin(13, Pin.IN)
pin.irq(trigger=Pin.IRQ_FALLING|Pin.IRQ_RISING, handler=callback)

ADC (Helligkeitssensor)

import machine
adc = machine.ADC(0)
adc.read()

Timer

import machine
pin = machine.Pin(5, machine.Pin.OUT)
adc = machine.ADC(0)
def readsensor(t):
	pin.value(adc.read() < 800)
tim = machine.Timer(-1)
tim.init(period=100, mode=Timer.PERIODIC, callback=readsensor)

Neopixel

import machine, neopixel
np = neopixel.NeoPixel(machine.Pin(0), 1)
np[0] = (255, 0, 0)
np.write()

Netzwerk

Setup (nur einmal notwendig!)

import network
nic = network.WLAN(network.STA_IF)
nic.active(True)
nic.connect('metalab','')
nic.ifconfig()
import webrepl_setup

Sockets

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("127.0.0.1", 1234))
s.send("Hello World\n".encode('utf-8'))
s.close()