ESP8266 Wemos D1 Mini mit Micropython und Bipes

Das Online-Tool Bipes soll ja grafische Programmierung von Micropython- Geräten bieten, ohne das man dafür eigene Software brauchen soll. Zumindest für das Flashen der initialen Micropython- Firmware braucht man die dann aber doch noch…

esptool.py --port /dev/ttyUSB0 --baud 115200 erase_flash
esptool.py --port /dev/ttyUSB0 --baud 460800 write_flash --flash_size=detect -fm dio 0 esp8266-20210202-v1.14.bin

Danach lässt sich das Device per seriellem Terminal ansprechen und man verpasst ihm erstmal das WebREPL Interface, über das man das Gerät auch übers Netz über Websockets erreichen kann. Bipes nutzt dieses Feature.

import webrepl_setup

Dann die Setup- Fragen beantworten und neu starten

Trotzdem sollte man das serielle Terminal nicht zu weit weglegen, denn irgendwie läuft Bipes da doch noch etwas wackelig.

Dann verbindet man das Gerät mit dem lokalen WLAN

import network sta_if = network.WLAN(network.STA_IF) sta_if.active(True) sta_if.scan() sta_if.connect("SSID", "password") sta_if.isconnected() sta_if.ifconfig()

und dann läßt sich das WebREPL Interface als Websocket von Bipes aus ansprechen.

Ein MQTT Client ist dann ratzfatz aufgesetzt:

Blockly Code

<xml xmlns=„https://developers.google.com/blockly/xml“>

<variables>
<variable type="String" id="y]d@i[3,/QZ~fJl2hZta">topic</variable>
<variable id=":prU92/w#X.t:P$$tRvS">data_bytes</variable>
</variables>
<block type="wifi_client_connect" id="MSZ(#F)aRA,p+KZ;9+$H" x="-262" y="-62">
<field name="NAME">Connect to Wifi network</field>
<field name="WIFI_CLIENT_NET_NAME">Network name</field>
<field name="WIFI_CLIENT_NET_KEY">Network key</field>
<value name="wifi_client_essid">
<shadow type="text" id="Q5KsfP_Haf_2ULXv?-s1">
<field name="TEXT">SKWLANAP2</field>
</shadow>
</value>
<value name="wifi_client_key">
<shadow type="text" id="BQyPQxJ5K-KVEywg+[Hl">
<field name="TEXT">password</field>
</shadow>
</value>
<next>
<block type="text_print" id="55{G-RVwy14UZsqW5Ggc">
<value name="TEXT">
<shadow type="text" id="dXSoiCAqOmY)cy.EPMeB">
<field name="TEXT">abc</field>
</shadow>
<block type="net_ifconfig" id="RF1bkge..3y)BP/s;NJ:">
<field name="NET_IFCONFIG">Wifi current IP</field>
</block>
</value>
<next>
<block type="mqtt_init" id="t$l|Nq,#FW.MX0u|kPCP">
<field name="BLOCK_MQTT_INIT">Start MQTT Client</field>
<field name="MQTT_SERVER">Server Address</field>
<field name="MQTT_PORT">Server Port</field>
<field name="MQTT_USER">Username</field>
<field name="MQTT_PASSWORD">Password</field>
<value name="server">
<shadow type="text" id="Q9w6U6bL+~bd%G@/xwBn">
<field name="TEXT">openhabianpi</field>
</shadow>
</value>
<value name="port">
<shadow type="math_number" id="6tnVAM(Ug6MO~o)G(DY2">
<field name="NUM">1883</field>
</shadow>
</value>
<value name="user">
<shadow type="text" id="v_ElGa0p^wDJQzy,QPI_">
<field name="TEXT">openhabian</field>
</shadow>
</value>
<value name="password">
<shadow type="text" id="[cJ3r15q!FhFO9sF?%Nz">
<field name="TEXT">openhabian</field>
</shadow>
</value>
<next>
<block type="variables_set" id="Gt6wpG,_Ohvg%Kjt{n:F">
<field name="VAR" id="y]d@i[3,/QZ~fJl2hZta" variabletype="String">topic</field>
<value name="VALUE">
<block type="text" id="$y/3NH;jMm,[@;5#`kIB">
<field name="TEXT">micropython</field>
</block>
</value>
<next>
<block type="variables_set" id="{pCPH4#MS^=M+{C4FZ}X">
<field name="VAR" id=":prU92/w#X.t:P$$tRvS">data_bytes</field>
<value name="VALUE">
<block type="text" id="Vn3J^*vV(#r3+E/bOL9m">
<field name="TEXT"/>
</block>
</value>
<next>
<block type="mqtt_set_callback" id="v:A4;X6(T1=t_Cp)|/)Y">
<field name="BLOCK_MQTT_SET_CALLBACK">Set Callback to MQTT Messages</field>
<field name="MQTT_DATA_VAR" id=":prU92/w#X.t:P$$tRvS">data_bytes</field>
<field name="MQTT_TOPIC_VAR" id="y]d@i[3,/QZ~fJl2hZta" variabletype="String">topic</field>
<statement name="do">
<block type="variables_set" id="coY/4s_IFeDk5[Y`Uh;7">
<field name="VAR" id=":prU92/w#X.t:P$$tRvS">data_bytes</field>
<value name="VALUE">
<block type="text_to_str" id="5t6nB?El]wl]Y:rDG(5:">
<field name="VAR">to str</field>
<value name="var">
<block type="variables_get" id="vch0q5n#tOk{C1u_4n)o">
<field name="VAR" id=":prU92/w#X.t:P$$tRvS">data_bytes</field>
</block>
</value>
</block>
</value>
<next>
<block type="text_print" id="fSH`IqdS?JDYQGr7Gsoq">
<value name="TEXT">
<shadow type="text">
<field name="TEXT">abc</field>
</shadow>
<block type="variables_get" id=")P0A%d;z)?vOtkCRbggz">
<field name="VAR" id=":prU92/w#X.t:P$$tRvS">data_bytes</field>
</block>
</value>
</block>
</next>
</block>
</statement>
<next>
<block type="mqtt_subscribe" id="k4]wWl3uN]FG@Q,tlbFD">
<field name="BLOCK_MQTT_SUBSCRIBE">Subscribe to MQTT Topic</field>
<field name="MQTT_TOPIC">Topic</field>
<value name="topic">
<shadow type="text">
<field name="TEXT"/>
</shadow>
<block type="variables_get" id="D4Ot!5HN8!z2B2Ma=Jom">
<field name="VAR" id="y]d@i[3,/QZ~fJl2hZta" variabletype="String">topic</field>
</block>
</value>
<next>
<block type="text_print" id="=b4SosJ}cw0$cvP8qJBI">
<value name="TEXT">
<shadow type="text" id=".?aE|0-F:[y,%HM`tdVz">
<field name="TEXT">MQTT connected</field>
</shadow>
</value>
<next>
<block type="controls_whileUntil" id="ZPS#MljPf8M.vZM6g}L]">
<field name="MODE">WHILE</field>
<value name="BOOL">
<block type="logic_compare" id="@we{T0$%ni$_+8TU~t=.">
<field name="OP">NEQ</field>
<value name="A">
<block type="variables_get" id="cM}wzy%o5[@`N7c:!s|Y">
<field name="VAR" id=":prU92/w#X.t:P$$tRvS">data_bytes</field>
</block>
</value>
<value name="B">
<block type="text" id="XDSi,Uf=TYwuns@Nf@mb">
<field name="TEXT">end</field>
</block>
</value>
</block>
</value>
<statement name="DO">
<block type="mqtt_wait_msg" id="U-Bok1;R5;i2;Bc(9F,C">
<field name="BLOCK_MQTT_WAIT_MSG">Wait for MQTT Server messages</field>
</block>
</statement>
<next>
<block type="mqtt_disconnect" id="}vArD2k$7:}xEIS$hd$m">
<field name="BLOCK_MQTT_DISCONNECT">Disconnect MQTT Client</field>
<next>
<block type="text_print" id="q2,K.LI)ceJ~V98Z/:/@">
<value name="TEXT">
<shadow type="text" id="pLP8W!8hcCa=-{O@LH]M">
<field name="TEXT">End</field>
</shadow>
</value>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>

</xml>

Und damit das Programm auch bei jedem Reset & Power-On startet. speichert man es als main.py im „Files“- Menü von Bipes.