----------8<-----{20160415-0448-GMT: Schlaflos im Oberharz}----->8----------
Gestern oder Vorgestern, je nachdem ob man Tage durch den Kalender oder durch die sie trennende Schlafphase definiert, hatte ich mal wieder vergeblich versucht, den
master-Branch von NodeMCU auf meinen
gelben Minions zu testen.
Wie seit Langem waren wieder essenzielle Module unbenutzbar und unter deren Namen fand Lua nur eine leere Definition, uninitialisierte Variable oder wie auch immer man das in Lua-isch ausdrücken mag, und Sowas hat erst recht keine Methoden und dann is' halt auch nix z.B. mit Wifi...
Der DEV-Branch hingegen hat mir über längere Zeit nur Crash-Reboot-Tänze meiner Minions beschert aber es scheint sich dort wohl Etliches getan zu haben.
Ein eben frischer Checkout des DEV-Branches, kurz in die "make-Mikrowelle" geschoben und dann auf den kleinen Gelben geflasht ist wohl jetzt wieder vom Minion-BSE befreit und auch "wifi" ist nimmer "nil":
...und der Heap ist trotz DeFAULT-Einstellungen beim Backen angnehm üppig... war das nicht am Anfang mal nur um 24kBytenanas herum?
Also mal schau'n ob meine kleines Skriptereien von vor Ewigkeiten noch laufen...
Wifi klappt, denn ich erreiche beide Minions über Port 23, aber Daten kommen keine bei Thingspeak an. Es sind keine Fehlermeldungen zu sehen... nennen wir's mal: Es funktioniert mehr als nicht funktioniert... ;-) ...vielleicht haben sich irgendwelche Parameter oder andere Bananen geändert... das klär ich später mal... dann mit mehr Koffein im Getriebe oder nach mehr Schlaf und mehr RTFM-Update... o:-)
----------8<-----{20160415-0800-GMT: Gotcha!}----->8----------
"thingspeak.lua" schaut nun wie folgt aus:
Code: Alles auswählen
-- 600000 = 10 min
tmr.alarm(0,600000,1,
function()
c=net.createConnection(net.TCP,0)
c:connect(80,'184.106.153.149')
c:on("connection",function(c)
c:send(string.format("GET /update?key=#THINGSPEAK-KEY#&field1=%d&field2=%d&field3=%d&field4=%d&ignore=%d HTTP/1.1\r\nHost: api.thingspeak.com\r\nAccept: */*\r\n\r\n",tmr.now(),node.heap(),file.fsinfo()))
end)
c:on("sent",function(c) c:close() end)
end
)
-->
https://thingspeak.com/channels/42511
-->
https://thingspeak.com/channels/46460
----------8<-----{20160416-0207-GMT}----->8----------
Auch ein modifiziertes "telnetd.lua" findet sich in den Quellen. Das Verhalten der Söckchen hat sich irgendwie geändert und daher muß man nun mehrere auszugebende Zeilen "sauber" in einer Warteschlange verwalten. Ich hab nicht in den Lua-Netzwerk-Kram-C-Quellen nach Erleuchtung gebuddelt, sondern das einfach mal so akzeptiert und es leicht umformatiert in Betrieb genommen.
Code: Alles auswählen
s23 = net.createServer(net.TCP, 180)
s23:listen(23, function(socket)
local fifo={}
local fifo_drained=true
local function sender(c)
if #fifo>0
then c:send(table.remove(fifo,1))
else fifo_drained=true
end
end
local function s_output(s)
table.insert(fifo,s)
if socket~=nil and fifo_drained
then fifo_drained=false sender(socket)
end
end
node.output(s_output, 0)
socket:on("receive",function(c,l) node.input(l) end)
socket:on("disconnection",function(c) node.output(nil) end)
socket:on("sent",sender)
print("Welcome to NodeMcu world.")
end)
Mehrzeilige Ausgabe, z.B. aufbereitetes "file.list()", klemmte mit dem alten "telnetd.lua" nach Ausgabe der ersten Zeile. Nun erhält man wieder, was man erwartet:
Code: Alles auswählen
Welcome to NodeMcu world.
> for n,s in pairs(file.list()) do print(string.format("%7d %s",s,n)) end
61 init.lua
244 init-sta.lc
592 telnetd.lua
148 init.lc
434 thingspeak.lua
920 telnetd.lc
101 init-sta.lua
> _
Pestens, pestens!
----------8<-----{20160417-0550-GMT}----->8----------
Laut
http://www.esp8266.com/wiki/doku.php?id ... pplication ist es speichereffizient, seine transienten Code-Teile, Filesystem-Geschwindigkeit sei Dank, quasi als sich wieder selbst vergessende Module zu formulieren und über den "require"-Befehl auszuführen:
Code: Alles auswählen
(yeti@kumari:3)~$ nc nodemcu0 23
Welcome to NodeMcu world.
> require("ll")()
61 init.lua
804 thingspeak.lc
133 cat.lua
244 init-sta.lc
593 telnetd.lua
148 init.lc
176 ll.lua
422 thingspeak.lua
920 telnetd.lc
101 init-sta.lua
> require("cat")("ll.lua")
local module=...
return function()
package.loaded[module]=nil
module=nil
local k,v
for k,v in pairs(file.list()) do
print(string.format("%7d %s",v,k))
end
end
> require("cat")("cat.lua")
local module=...
return function(n)
package.loaded[module]=nil
module=nil
file.open(n)
print(file.read())
file.close()
end
> _
"require" führt auch vorkompilierte Skripte aus:
Code: Alles auswählen
> node.compile("ll.lua")
> require("ll")()
61 init.lua
804 thingspeak.lc
312 ll.lc
133 cat.lua
244 init-sta.lc
593 telnetd.lua
148 init.lc
177 ll.lua
422 thingspeak.lua
920 telnetd.lc
101 init-sta.lua
"ll.lc" ist das Kompilat.
Code: Alles auswählen
> file.rename("ll.lc","dir.lc")
> require("ll")()
61 init.lua
804 thingspeak.lc
312 dir.lc
133 cat.lua
244 init-sta.lc
593 telnetd.lua
148 init.lc
177 ll.lua
422 thingspeak.lua
920 telnetd.lc
101 init-sta.lua
Nun heißt es "dir.lc", damit der folgende Aufruf beweist, daß nicht "ll.lua" benutzt wurde...
Code: Alles auswählen
> require("dir")()
61 init.lua
804 thingspeak.lc
312 dir.lc
133 cat.lua
244 init-sta.lc
593 telnetd.lua
148 init.lc
177 ll.lua
422 thingspeak.lua
920 telnetd.lc
101 init-sta.lua
> _
...fehlt eigentlich nur noch 'ne nette shellartige REPL, die selbsttätig das "require"-Jedöns um Eingaben drumrumstrixxelt...
o;-)
----------8<-----{20160419-0600-GMT}----->8----------
Gestern hab ich mal Brotbrett, FTDI und Jumperstrippen rausgekramt und ein ESP-01-chen (512k-Variante) mit NodeMCU beglückt:
Code: Alles auswählen
> =file.fsinfo()
64256 3765 68021
> require "ll"()
61 init.lua
133 cat.lua
592 telnetd.lua
421 thingspeak.lua
176 ll.lua
101 init-sta.lua
> _
Die gerundet 64k des Filesystems reichen durchaus für manch Spielerei, die wenigen Pins sind eine andere Dimension... daher steht das Ausprobiern von I2C unter NodeMCU am ESP-01 ziemlich weit oben auf meiner MMMABSSGDAHListe...
Ich hatte anfangs Bedenken, aber zum Flashen des ESPchens reicht scheinbar tatsächlich der vom FTDI kommende 3.3V-Saft:
https://importhack.files.wordpress.com/ ... rmware.png
Im Normalen Betrieb hingegen nicht.
Letztlich hab ich dem ESPchen dann doch die 3.3V aus anderer Quelle gegeben, damit nach dem Flashen im selben Kontext weiter gespielt werden konnte...
Nächster Halt in ESP-01-Stadt ist dann wohl das Zimmern von ein paar handlicheren Brotbrett-Adaptern... verschiedene I2C-FM-Empfänger müssten sich auch noch in meinen Eseltroniksedimenten finden lassen... ;-) ...das gibt dem Terminus Webradio dann eine ganz neue Dimension... ;-) ...oder bleibt's vielleicht doch bei Telnet?
----------8<-----{20160419-1700-GMT}----->8----------
Ich hab endlich
eine Quelle für 15-pinnige Stapelheader gefunden. Das heißt, ich kann bald "Etagen" im
NodeMCU-Devkit-Format zusammenbraten und z.B. auch ESP-Etagen ohne USB oder anderen Variationen...
Hör ich da etwa schon jetzt meine Lötnadel fröhlich jubeln?
;-)
----------8<-----{20160420-0515-GMT}----->8----------
Spielerei am Rande:
Code: Alles auswählen
(yeti@kumari:8)~$ nc nodemcu0 23 -i1 -q1 <<kthxbye
require"ll"()
kthxbye
Welcome to NodeMcu world.
268 cat.lc
133 cat.lua
101 init-sta.lua
176 ll.lua
244 init-sta.lc
593 telnetd.lua
148 init.lc
804 thingspeak.lc
434 thingspeak.lua
920 telnetd.lc
312 ll.lc
> (yeti@kumari:8)~$ _
Sich auf Verzögerungen verlassen ist sicher nicht der Hit... dies zum sauberem Filetransfer ausweiten erfordert dann schon noch etwas Fehlererkennung... aber für den kleinen Hack zwischendurch ist's schon nett...
----------8<-----{20160421-0850-GMT}----->8----------
Nach langer Pause in Sachen ESP-02 hab ich die beiden hybschen kleinen Roten mal wieder rausgekramt und mit aktuëllem NodeMCU aus dem dev-Branch geflasht... sogar mit bis zu 930600 Baud...
...und danach Powercycle mit entGNDetem GPIO0 gab Funkstille... nix Gelaber mit ESP-02...
GPIO0 geVCCt und es klappt!
Bei ESP-01 reicht's, GPIO0 nimmer zu GNDen... die haben wohl'n PullUP auf der Leitung und ESP-02 nicht. Ob man ESP-02 flashen kann ohne GPIO0 zu GNDen hab ich nicht getestet... vielleicht ist der auch so hochohmig und empfndlich, daß ein ESP-02 mit frei flatterndem GPIO0 an SETI teilnimmt ohne daß man das ahnt... ;-) ...das hatte ich dann auch keinen Bock mehr genauer zu hinterfragen...
----------8<-----{TBC, aber soooowas von...}----->8----------
Flüchtige Fußnote: Diese Dark-Minions haben grad 'nen günstigen Kurs. Minions mit USB fest onboard sind nicht für jeden Einsatz optimal, aber für manch Spielerei doch angenehm faulheitsfördernd... o;-)
Flüchtige Fußnote zur flüchtigen Fußnote: Brotbrettfreundlich, ohne Zwangsehe mit einem USB-Adapter und vor Allem in bemerkenswertem roten Gewand daherkommend sind http://www.electrodragon.com/product/es ... ter-board/.
----------8<-----{
Allons-y, Alonso!}----->8----------