diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index b0c40dc..6294081 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -16,4 +16,6 @@ services: volumes: - ./src/:/flask/ env: - - FLASK_APP=server.py \ No newline at end of file + - FLASK_APP=server.py + ports: + - 5000:5000 \ No newline at end of file diff --git a/docker/flask/Dockerfile b/docker/flask/Dockerfile index d16af64..63550e5 100644 --- a/docker/flask/Dockerfile +++ b/docker/flask/Dockerfile @@ -2,4 +2,5 @@ from python:3-alpine RUN pip install Flask WORKDIR /flask ENV FLASK_APP server.py +EXPOSE 5000 CMD ["flask", "run"] \ No newline at end of file diff --git a/presentation/presentation.tex b/presentation/presentation.tex index 3af810c..2a545fd 100644 --- a/presentation/presentation.tex +++ b/presentation/presentation.tex @@ -117,8 +117,9 @@ Cooler: \href{https://micropython.org/}{MicroPython} \item Basiert auf Python 3 \item Frei \& Open Source \item Einige Funktionalität eingeschränkt (z.B. Multithreading) - \item Verscheidene Boards/Controller unterstützt + \item Verscheidene Boards/Controller unterstützt: PyBoard, ESP32, \dots \end{itemize} +Lowlevel: C, Arduino Studio \end{frame} \section{Setup} @@ -222,7 +223,6 @@ import webrepl_setup \begin{lstlisting}[caption={C\&C Server},label=cnc] from flask import Flask, request app = Flask(__name__) - @app.route("/") def hello(): return "Hello ESP8266!" @@ -232,22 +232,81 @@ def log(id): \end{lstlisting} Starten: \begin{itemize} + \item[!] pip install Flask \item python server.py \item docker-compose up (server.py in src/) \item FLASK\_APP=server.py flask run \end{itemize} +\end{frame} +\begin{frame}[fragile]{Daten übertragen} +\begin{lstlisting}[caption={HTTP Requests},label=http] +import urequests +host = "http://your.host.ip.here:5000" +response = urequests.get(host)q +print(response) +import machine +board_id = int.from_bytes(machine.unique_id(), 'little') +payload = '{"board": "{id}"}'.format(id=board_id) +json_header = {'Content-Type': 'application/json'} +post_url = "{host}/id/{id}".format(host=host, id=board_id) +urequests.post(post_url, data=data, headers=json_header) +\end{lstlisting} \end{frame} \section{Basteln} \subsection{Blinkende LED} -\begin{frame}{LEDs} +\begin{frame}{LED anschließen} +TODO schema +\end{frame} +\begin{frame}[fragile]{LEDs} +\begin{lstlisting}[caption={LED},label=led] +import machine, time, math +pin = machine.Pin(0, machine.Pin.OUT) +pin.on() +pin.off() +pwm = machine.PWM(pin) +pwm.duty(512) +pwm.deinit() + +def pulse(l, t): + for i in range(20): + l.duty(int(math.sin(i / 10 * math.pi) * 500 + 500)) + time.sleep_ms(t) +led = machine.PWM(machine.Pin(2), freq=1000) +pulse(led, 50) +for i in range(10): + pulse(led, 20) +\end{lstlisting} \end{frame} \subsection{Schalter und Taster} +\begin{frame}[fragile]{Input} +TODO: schema +\begin{lstlisting}[caption={Input},label=input] +import machine +pin = machine.Pin(0, machine.Pin.IN, machine.Pin.PULL_UP) +status = pin.value() + +def callback(p): + print('changed', p) + +pin.irq(trigger=machine.Pin.IRQ_RISING | machine.Pin.IRQ_FALLING, handler=callback) +\end{lstlisting} +\end{frame} \subsection{Sensoren} -\subsection{Push} +\begin{frame}[fragile]{Sensoren} +TODO: schema +\begin{lstlisting}[caption={Sensoren},label=senors] +import dht +import machine +d = dht.DHT22(machine.Pin(4)) +d.measure() +d.temperature() +d.humidity() +\end{lstlisting} +\end{frame} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -262,4 +321,14 @@ Starten: \normalsize \end{frame} +\section*{Ausblick} +\begin{frame}{Was geht noch?} +\begin{itemize} + \item \url{https://learn.adafruit.com/micropython-hardware-i2c-devices/overview} + \item \url{http://luftdaten.info/} + \item \url{https://micropython-on-esp8266-workshop.readthedocs.io/en/latest/index.html} + \item MQTT, \href{http://nsq.io/}{nsq.io} +\end{itemize} +\end{frame} + \end{document}