Library para gumawa ng HTTP query gamit ang ESP8266 WiFi module at Arduino

Library para gumawa ng HTTP query gamit ang ESP8266 WiFi module at Arduino

Library para gumawa ng HTTP query gamit ang ESP8266 WiFi module at Arduino

Ang isang simpleng paraan upang magpadala ng impormasyon sa at mula sa isang microcontroller ay sa pamamagitan ng pagsentro nito sa isang web server. Kahit na ito ay hindi kasing-episyente ng isang paraan gaya ng, halimbawa, direktang pag-access sa isang database, ito ay sapat na epektibo, lalo na kung isasaalang-alang mo ang isang proyekto batay sa isang microcontroller, at idagdag ang mga pakinabang ng ubiquity (data sa cloud) at pagiging simple (ito maaaring pangasiwaan bilang tekstong impormasyon at mga order). Ang pagpapadala ng impormasyon gamit ang system na ito ay maaaring binubuo ng paggawa ng mga kahilingan sa HTTP POST at pagtanggap nito sa pamamagitan ng pagsusuri sa nilalaman ng tugon sa isang kahilingan sa HTTP GET.

Talaan ng Nilalaman

    El ESP8266 WiFi module Ito ay isang napakatipid na opsyon, na may isang pagganap na angkop para sa paggamit sa mga microcontroller at napakadaling gamitin sa pagtatrabaho sa mga AT command.

    Upang ma-systematize ang paggamit nito sa mga kahilingan sa HTTP, gumawa ako ng isang maliit na library na sumusuporta sa mga pangangailangan ng aking sleep management device project (na tinawag kong SleepManager) dahil ibinase nito ang imprastraktura nito sa isang web server na nagpapahintulot na ma-extend ito sa isang object. IoT bilang serbisyo sa ulap. Hindi mahirap magdagdag ng iba pang mga serbisyo tulad ng mga kahilingan ng UDP sa library, halimbawa, sa pag-synchronize ng oras sa NTP bagaman, tulad ng ipinaliwanag ko sa naka-link na teksto, hindi ito kritikal para sa aking mga pangangailangan at mareresolba ko ito nang katanggap-tanggap sa isang kahilingan sa HTTP sa isang web page na inihanda para sa layuning iyon, tulad ng ipinapakita ko sa isang halimbawa ng paggamit ng library na ito.

    Ang pagpapatakbo ng library ay batay sa pagpapadala ng mga AT command kapag available ang device at paulit-ulit ang mga ito (na may maliit na pagkaantala) kung sakaling magkaroon ng error, na binibigyang-kahulugan bilang hindi available (matagumpay, sa pamamagitan ng pagsubok) halimbawa mula sa point WiFi access o kinukunsulta ang server.

    Sinasamantala ng library ang katotohanan na ang ESP8266 WiFi module ay nagbabalik ng +IPD code bilang babala ng pagtanggap ng data upang punan ang isang maliit na buffer ng impormasyong ibinalik ng server. Para sa proyekto ng sleep management device kailangan kong pag-aralan ang napakakaunting data na ibinalik mula sa server kaya, upang makatipid, ang buffer at ang pointer na tumatakbo dito ay lalong maliit; Ito ang magiging isa sa mga unang bagay na kailangan mong baguhin para magamit muli ang library para magproseso ng mas malaking dami ng data.

    Ang mga function na nakalantad bilang publiko ay nagbibigay-daan sa (1) na malaman ang katayuan ng module: kung ito ay konektado o hindi, kung mayroong data sa buffer at kung magkano at kung ang ESP8266 module ay nakumpleto ang operasyon na hiniling; (2) kumonekta sa isang WiFi access point sa isang network na may DHCP server at (3) gumawa ng HTTP GET at POST na mga kahilingan bagaman, tulad ng makikita mo, ang code ay idinisenyo upang gawing napakadaling magdagdag ng iba.

    Tungkol sa panloob na paggana, una dalawang matrice ang binuo, ang isa ay may mga AT order at isa pa na may inaasahang mga tugon para sa tagumpay at pagkakamali; Pagkatapos, ang program na gumagamit ng library ay dapat tumawag sa function paminsan-minsan magpadala na siyang mamamahala sa pagpapadala ng mga order sa module kung magagamit ang mga ito at hindi abala at sa function tumanggap na magpoproseso ng mga tugon mula sa ESP8266 module (at mula sa HTTP server sa pamamagitan nito kung naaangkop)

    Dahil may posibilidad na madiskonekta ang module dahil sa pagkawala ng signal, masusuri ng pangunahing programa kung nakakonekta ang ESP8266 module sa WiFi access point (na may function Conectado) at subukang kumonekta kung hindi man (na may function connect_wifi)

    Upang malaman kung natapos na ang hiniling na operasyon, magagamit ng program ang function operation_finished at sa kasong iyon magpadala ng isa pa o gamitin ang nagresultang data kung saan ginagamit ang function read_buffer, na nagbabalik ng mga nilalaman ng buffer na napunan ng data na dumating sa ESP8266 module hanggang sa makumpleto ang operasyon, at ang function buffer_length na nag-uulat ng dami ng data na ito na binalaan ng server na ipapadala ito (upang ang impormasyon mula sa mismong module ay maaaring may diskwento)

    Ang halimbawa sa ibaba ay gumagamit ng HTTP query library na may ESP8266 WiFi module upang magpadala ng data sa server (isang porsyentong nakuha mula sa pagbabasa ng analog input) sa bawat tiyak na agwat ng oras. Dahil hindi nito inaasahan na makatanggap ng anumang tugon, hindi nito ginagamit ang buffer at sapat na ito para makumpleto nang tama ang operasyon. Ang sistemang ito ang ginagamit ko sa aking proyekto ng sleep management device upang iimbak ang mga resulta ng mga pagbabasa ng sensor sa server.

    Ang sumusunod na halimbawa ay gumagamit ng isang HTTP GET query upang i-query ang oras ng server at i-synchronize ito sa oras ng microcontrolled na device sa pamamagitan ng pagdaragdag ng tinantyang oras ng pagtugon; Sa katunayan, nagdaragdag ito ng isa pang 4 hanggang 6 na segundo upang matiyak na ang oras ng device ay mas malaki kaysa sa oras ng server at upang madaling suriin kung ang oras sa real-time na orasan na bahagi ng device ay tama o nawala dahil sa pag-download .baterya.

    Pagkatapos ng maraming pagsubok na-verify ko na ang sistemang ito ng Pag-synchronize ng oras sa ESP8266 WiFi module Ito ay sapat na tumpak para sa aking mga pangangailangan; sa pinakamasamang kaso na may error na wala pang 10 segundo na medyo hindi nauugnay sa aking kaso.

    Tulad ng makikita sa code, kailangan munang i-query ang haba ng buffer dahil nire-reset ito ng pagbabasa upang ito ay magagamit upang mag-imbak ng bagong data.

    Kapag nabasa na ang nilalaman ng buffer, sa halimbawang ito ito ay pinoproseso upang makuha ang oras. Una, ang teksto sa pagitan ng mga braces ay pinili (tumugon ang server gamit ang command PHP echo “{“.time().”}”) lo transforma en un “objeto tiempo” y de él obtiene en formato humano la fecha y la hora.

    Ang sumusunod na halimbawang programa, na inspirasyon ng query ng isang user, ay ginagamit upang mahanap ang pampublikong IP address gamit ang serbisyo CheckIP AWS (Mga Serbisyo sa Amazon sa Amazon) tuwing limang minuto.

    Tulad ng sa mga nakaraang halimbawa, isang serye ng mga pagpapalagay ang ginawa na kailangang baguhin depende sa configuration ng network na ginamit (192.168.1.X, sa halimbawa), ang SSID at ang WiFi key... Ang paraan upang mahanap ang Ang IP address ay hindi masyadong elegante, ipinapalagay nito na ito ang huling linya ng tugon sa kahilingan ng HTTP GET bagaman maaaring mayroong isang API upang gawin ito sa mas orthodox na paraan.


    Maaari kang i-download ang ESP8266 library para sa mga HTTP query sa Arduino Uno (nang walang console) at mula dito maaari mo i-download ang ESP8266 HTTP query library para sa Arduino na gumagamit ng console, ibig sabihin, kailangan nitong magpatupad ng serial port sa pamamagitan ng software o gamitin bilang hardware, halimbawa, isang motherboard arduino mega o arduino leonardo.

    Maaaring Na-miss Mo