Repozitář softwaru pro MB03+ Ultimate
23. 9. 2019
Polévka (soup) se představuje
26. 9. 2019

Ti, kteří čtou tyto stránky ví, že si posledních pár dní hraji s WiFi modulem ESP8266, který je součástí diskového řadiče MB03+ Ultimate. Tento modul je velmi levný (cena je kolem 5 Euro) a ovládání je velmi jednoduché (možná až moc). Ti, kteří mají ke svému ZX Spectru připojen SIF s ConnectOne modulem, to mají jednoduché. Tento modul umí v základu pracovat mimo jiné např. s FTP protokolem a ovládá se pomocí AT příkazů. Náš ESP8266 se taktéž ovládá pomocí AT příkazů, ale tam veškerá podobnost s ConnectOne končí. Modulu ESP8266 je např. protokol FTP úplně cizí. Zkusím Vám tedy přiblížit, jak s modulem ESP8266 pracuji, nebudu zde postovat žádný kód (ten optimalizuji téměř každý den), ale spíše se zkusím rozepsat jak mé rutinky fungují.

ESP8266 - WiFi modul v MB03+

Ti, kteří čtou tyto stránky ví, že si posledních pár dní hraji s WiFi modulem ESP8266, který je součástí diskového řadiče MB03+ Ultimate. Tento modul je velmi levný (cena je kolem 5 Euro) a ovládání je velmi jednoduché (možná až moc). Ti, kteří mají ke svému ZX Spectru připojen SIF s ConnectOne modulem, to mají jednoduché. Tento modul umí v základu pracovat mimo jiné např. s FTP protokolem a ovládá se pomocí AT příkazů. Náš ESP8266 se taktéž ovládá pomocí AT příkazů, ale tam veškerá podobnost s ConnectOne končí. Modulu ESP8266 je např. protokol FTP úplně cizí. Zkusím Vám tedy přiblížit, jak s modulem ESP8266 pracuji, nebudu zde postovat žádný kód (ten optimalizuji téměř každý den), ale spíše se zkusím rozepsat jak mé rutinky fungují.

Veškerá komunikace s modulem ESP8266 probíhá přes porty #143b (RX - čtení) a #133b (TX - zápis). Takže si teoreticky vystačíme s instrukcemi IN a OUT a máme vystaráno. Problém ale je ten, že my nevíme, kdy nám ESP8266 posílá data a jak dlouho je bude přijímat. Vytvořil jsem proto několik rutinek pro komunikaci a jelikož to vypadá, že fungují s největší pravděpodobností je v nejbližší době zveřejním.

Odeslání příkazu
Každý AT příkaz musí končit byty 13 a 10 (windows odřádkování). To je první důležitá poznámka. Druhá důležitá věc je, že musíte vědět, kdy můžete poslat byte ke zpracování. K tomu slouží načítání portu na zápis (ano, načítáme port na zápis ;) ), kde nám načtená hodnota, resp. bit 1 tohoto bytu řekne, zda můžeme poslat další byte ke zpracování. V podstatě vytvoření této rutinky není nic světoborného - čekáte než můžete poslat byte a pak postupně outujete AT příkaz do modulu.

Načtení hodnot z WiFi modulu
Jelikož nevíme, kdy můžeme číst hodnoty z WiFi modulu, opět se zeptáme zapisovacího portu, kdy nám napoví bit 0, načtené hodnoty. Tady ale nastává problém, protože, to že nemáme žádné data ve FIFO buferu WiFi modulu neznamená, že nám žádné nepřijdou - ono totiž se často stává, že data chodí se zpožděním. Takže scénář je následovný: čekáte, až budete mít data ve FIFO buferu a jakmile tam jsou, čtete je a ukládáte do paměti - dokud FIFO bufer nevyprázdníte. Jenže co když jste nezískali všechna data a tok dat byl přerušen. FIFO hlásí že je prázdný, nemáte proč číst z tohoto buferu. Data se ve FIFO buferu objeví za chvilku, takže byste mohli opět načítat, ale jak poznáte konec toku dat? Zde jsem vytvořil první rutinku na zpracování odpovědi z WiFi modulu.

Čtení dat z modulu s očekávanou odezvou
Modul ESP8266 na hodně AT příkazů reaguje po provedení nějakou odpovědí (OK, CONNECT, DISCONNECT, ERROR), takže jsem si napsal rutinku, které předám jako parametr tuto předpokládanou odpověď. Tato rutinka čte z FIFO bufferu, dokud tuto odpověď nedostane - pak číst přestane. Takže celá věda je v tom, že zavolám rutinku na odeslání příkazu a pak čekám např. na odpověď OK.

Rutinka na vyprázdnění FIFO buferu
FIFO bufer má velikost 16kB. Velmi často se stává, že musíte tento buffer vyprázdnit - v podstatě stačí načítat hodnoty z tohoto buferu a "zahozovat je".

Stahování souborů pomocí HTTP
ESP8266 umí navázat TCP spojení se serverem na daném portu. Pak si může pomocí příkazu GET vyžádat nějaký soubor (klidně i binární). Takže teoreticky to není žádná věda, ale ten soubor dostáváte rozsekaný po částech (které nejsou stejně velké). Každý úsek je definovaný řetězcem +IPD,velikost_v_bytech: - poté následuje počet bytů daného souboru a pak opět informace o dalším bloku. Vám tedy jen stačí odchytávat tyto informace a daný počet ukládat někam do paměti do té doby, než načtete celý soubor.

FTP spojení
Tak a jak to tedy bude s FTP? Navážete TCP spojení s FTP serverem na portu 21, zašlete mu uživatele a heslo. Dále musíte veškerou komunikaci odchytávat a podle toho se zachovat. Např. na portu, který Vám sdělí server přijímat data stahovaného souboru. Není to nic co by bylo jednoduché, ale pomocí výše popsaných rutin by to mělo jíž už snadno.

A co bude dál?
V současné době mám rozpracovaný repositář softwaru - s tím mi pomáhá Logout, který se mne snaží dokopat k tomu, abych využil např. pkgsrc, takže snad to bude mít hlavu a patu. Práce nejde úplně tak rychle jak bych si představoval, ale každý den nějaký ten pokrok mám (dnes jsem např. poprvé stáhl SCR soubor do paměti ZX Spectra). V podstatě mi v současné době chybí jen uložení stahovaného souboru na disk - což snad zvládnu zítra.

WiFi MOD Player jsem teď odsunul na pozadí, ale vrátím se k němu okamžitě, jak bude první publikovatelná verze repozitáře. Jelikož už budu mít odladěné rutinky na stahování souborů, nemělo by to být už tak těžké. FTP klient bude následovat, protože bych si ho chtěl v rámci duševního cvičení napsat. Jinak se všem omlouvám za zbytečný článek, ale píšu si ho vlastně spíše pro sebe - jsem hlava děravá a proč pak někde něco dohledávat v poznámkách na papíře, když si to mohu napsat sem, že? ;)

Jinak poznámka na konec, vše výše napsané platí pro firmware dodávaný defaultně s ESP8266. Existuje spousta jiných alternativních firmware pro tento modul, které se sice taktéž ovládají přes AT příkazy, ale kupodivu úplně jiné.
FB_IMG_1564639008126

3531total visits,3visits today

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *