Scoate rama foto digitală la Internet
Metode de implementare
Cel mai simplu mod de a gestiona o imagine rama foto digitala - este la fel de necesar pentru a comuta imaginile gata făcute, care sunt stocate în memoria sa. Iată un exemplu de implementare a acestei metode. Evident, această metodă nu este foarte flexibil - un număr variabil unic poate fi afișat, iar procesul de schimbare a acestui număr va fi destul de lent.
Partea de software
Am avut deja un STM32F4DISCOVERY consiliu de dezvoltare, așa că am decis să testeze «emfat» Biblioteca, a propus în articolul de mai sus. Cu Windows 7, nu au existat probleme, dar Frame nu a putut localiza fișierele de pe disc „virtuală“. După cum sa dovedit mai târziu, tableta cu Android, de asemenea, nu arată unitatea. Un alt computer cu dispozitiv Ubuntu USB găsit, dar nu a putut monta o unitate.
A fost necesară pentru a rezolva problema mai profund. După cum sa dovedit, în ciuda faptului că Windows detectează unitatea și poate citi fișiere de pe ea, programul TestDisk nu a putut determina sistemul de fișiere pe ea:

Treptat, prin studierea rezultatelor datelor „brute“, emise de TestDisk, precum și săparea în codul sursă al acestui program, am realizat că unul dintre criteriile prin care TestDisk determină sistemele de fișiere - dimensiunea discului. În «emfat» dimensiunea discului emulat depinde de cantitatea de date pe ea. Astfel, în cazul în care discul are unul sau mai multe fișiere mici, și dimensiunea disc nu va depăși 16 MB. În cazul în care FAT32 impune restricții cu privire la dimensiunea minimă a volumului - nu mai puțin de 65527 clustere. Având în vedere faptul că, în «emfat» un cluster ocupă 4096 bytes, pentru a satisface dimensiunea FAT32 disc ar trebui să fie 65527 * 4096
268Mb. În realitate nu este, iar acest lucru determină eroarea în determinarea tipului de sistem de fișiere. Încercarea de a mări volumul discului, creșterea cantității de fișier emulat de până la 400 MB nu au de lucru - poate că există încă ceva ce nu se potrivea. Așa că am decis să refacă «emfat» pentru a imita sistemul de fișiere FAT16.
În cele din urmă, acesta nu a reușit, iar unitatea a început să detecteze corect toate dispozitivele:

Trebuie remarcat faptul că FAT16 prea este pe limita de dimensiune disc - nu mai puțin de 4087 clustere, care este de 16 MB, în acest caz. Pentru a îndeplini această condiție este necesară pentru a crea un fișier virtual pentru 20 MB în «emfat».
Verificați cu rama foto a fost normal - rama este afișată cu succes a imaginii test stocate în controler de memorie flash. Următoarea etapă - încheierea de imagini personalizate. Cel mai simplu mod de a emula fișiere BMP - au o structură destul de simplu, imaginea poate fi un 256 de culori, de exemplu, un pixel există un octet. Asta numai în acest caz, pentru a stoca dimensiunea imaginii de 800 * 600 va avea nevoie de 480 KB de memorie RAM. Într-o astfel de memorie microcontroler acolo, și, prin urmare, vom rămâne o singură opțiune - pentru a forma o imagine „on the fly“. Principiul de funcționare din următoarele - în cazul în care cererile de dispozitiv gazdă la datele de stocare din dosar, «emfat» numește apel invers-funcția corespunzătoare acestui fișier. În această funcție a transferat numărul sectorului din care se solicită datele, iar indicele pentru care aceste date trebuie să fie înregistrate. Cunoscând numărul de sectoare, este posibil să se determine care parte a imaginii solicitate și forma.
În cursul experimentelor au arătat un fapt neplăcut - Windows poate interoga date din sectoare nu în ordinea în care apar. De ce este făcut - este neclar, dar complică formarea de imagini pe zbor, așa cum trebuie să calculeze numărul, dar sectorul - o bucată de date este solicitată în acest moment. O altă problemă - șir în fișiere BMP provin de jos în sus, ceea ce complică și mai mult calculul poziției.
Pentru a afișa textul am folosit biblioteca mcufont. Este convenabil, deoarece permite utilizarea de fonturi comprimate, din cauza căreia utilizarea memoriei flash este redus în mod semnificativ. Așa că am folosit fonturi destul de mari, această caracteristică este destul de important.
Această bibliotecă scrie în mod direct imaginea generată în memorie, astfel încât este necesar să se aloce o matrice separată în memoria RAM pentru biblioteca.
Am realizat, de asemenea, imaginile de desen de la controlerul de memorie. Toate imaginile, precum și textul afișat în alb-negru, astfel, într-o singură imagine octet pot fi stocate informații despre 8 pixeli. În scopul de a converti imagini obișnuite într-o formă adecvată pentru conectarea la proiect, a fost utilizat programul Asistent LCD.
Ca urmare, dispozitivul de stocare USB conectat este format dintr-imaginii ca aceasta:

După operația de program a fost verificat pe STM32F4DISCOVERY, am făcut dispozitivul în sine, care este un microcontroler conectat la un modul WiFi pe ea ESP8266. Din potrivite am fost doar un STM32F107RCT7 controler.
Schema pentru a obține dispozitivul de ieșire destul de simplu:

Dar, din cauza limitărilor privind mărimea consiliului - 17x36mm (am planificat să-l instalați în clădire terminat) și dimensiunea mare a plăcii de circuit al controlerului afară nu este cel mai usor de fabricat - față-verso, cu piese de montare pe ambele părți. Cu toate acestea, unele linii de înaltă tensiune a trebuit să facă sârmă.
Un fel de a obține rochia (în procesul de depanare, împreună cu modulul ESP-01):

Când indicați taxa a fost cea mai potrivită unitate WiFi ESP-03. Iată ce placa de rezultat este deja instalat modulul:

Și de la operator:

In timpul experimentelor, sa constatat că o sensibilitate antenă ceramică nu este suficient de clar - modulul pentru a se conecta cu ușurință la router. După conectarea la piesa concluzie WIFI_ANT de sârmă lungime 31 mm sensibilitate îmbunătățită semnificativ, și a devenit similar cu sensibilitatea ESP-01. Locul unde rama foto este instalat permanent, este situat la câțiva metri distanță de router, și funcționează modul fin și nativ antena, astfel încât nicio imagine suplimentare de antenă.
De când ESP8266 de lucru constantă destul de încălzit, am decis să-l includă numai atunci când cererile de informații. Gestionarea consumului de energie poate fi realizată prin utilizarea CH_PD modul de ieșire. Traducerea acestei ieșire la 0 plumb în ESP8266 trece în modul de consum redus de energie.
Pentru a face mai ușor pentru a testa funcționare ESP8266, am scris pentru un microcontroler de firmware separat, care pune în aplicare podul USB-UART. Este prin ființa ei de configurare modul de a lucra cu router-ul, astfel încât, după trecerea ESP8266 se conectează automat la acesta.
Principiul de funcționare a dispozitivului rezultat este destul de simplu - la fiecare 10 minute, controlorul încearcă să solicite date de la server, și în cazul în care nu reușește, să actualizeze datele meteorologice. Datele privind temperatura actuală și prognoza timp de 3 zile înainte openweathermap.org luate de pe site-ul, informația despre temperatura din interiorul și în afara balcon - c Majordomo server. În același timp, ea cere imagine cadru de imagine la fiecare 6 secunde, în timp ce afișează informații actuale. Deoarece ambele procese pot avea loc simultan, pentru a primi date de la ESP8266 utilizate DMA.
Ca rezultat, imaginea este afișată aici pe rama:
