{"id":1045,"date":"2023-11-16T13:56:11","date_gmt":"2023-11-16T12:56:11","guid":{"rendered":"http:\/\/www.automatyka-malin.pl\/?p=1045"},"modified":"2024-12-03T10:06:08","modified_gmt":"2024-12-03T09:06:08","slug":"esp-8266","status":"publish","type":"post","link":"http:\/\/www.automatyka-malin.pl\/?p=1045","title":{"rendered":"ESP 8266"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Projekt sk\u0142ada si\u0119 z dw\u00f3ch cz\u0119\u015bci:<br>1. Termometru cyfrowego, kt\u00f3ry wysy\u0142a dane na serwer, a tam one s\u0105 przetwarzane i wy\u015bwietlane;<br>2. W\u0119\u017ca z diodami RGB.<br>Realizacja projektu jest oparta o modu\u0142 WiFi NODE MCU v2 ESP8266-12E.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"269\" src=\"http:\/\/www.automatyka-malin.pl\/wp-content\/uploads\/esp8266-300x269.jpg\" alt=\"\" class=\"wp-image-200\" srcset=\"http:\/\/www.automatyka-malin.pl\/wp-content\/uploads\/esp8266-300x269.jpg 300w, http:\/\/www.automatyka-malin.pl\/wp-content\/uploads\/esp8266.jpg 724w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Ma on wbudowany konwerter USB-UART, dzi\u0119ki czemu mo\u017cemy go programowa\u0107 z komputera poprzez USB oraz stabilizator napi\u0119cia 3,3V DC (takim napi\u0119ciem s\u0105 zasilane uk\u0142ady ESP8266).<br>Modu\u0142 ten jest wyposa\u017cony w 22 pinowy uk\u0142ad ESP8266-12E z wbudowanym 32-bitowym uk\u0142adem RISC. Jest on taktowany zegarem 80MHz.<br>Ma on do dyspozycji 10 port\u00f3w GPIO, 2 porty UART. Posiada te\u017c 10-bitowe wej\u015bcie ADC.<br>Schemat blokowy NODE MCU v2 ESP8266-12E<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"252\" src=\"http:\/\/www.automatyka-malin.pl\/wp-content\/uploads\/esp8266_schem-300x252.jpg\" alt=\"\" class=\"wp-image-198\" srcset=\"http:\/\/www.automatyka-malin.pl\/wp-content\/uploads\/esp8266_schem-300x252.jpg 300w, http:\/\/www.automatyka-malin.pl\/wp-content\/uploads\/esp8266_schem-768x644.jpg 768w, http:\/\/www.automatyka-malin.pl\/wp-content\/uploads\/esp8266_schem.jpg 800w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><br>Ka\u017cdy z port\u00f3w GPIO mo\u017ca wykorzysta\u0107 jako SPI, PWM, I2c lub do termometru cyfrowego 1-Wire,<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"254\" src=\"http:\/\/www.automatyka-malin.pl\/wp-content\/uploads\/ds18b20-300x254.jpg\" alt=\"\" class=\"wp-image-199\" srcset=\"http:\/\/www.automatyka-malin.pl\/wp-content\/uploads\/ds18b20-300x254.jpg 300w, http:\/\/www.automatyka-malin.pl\/wp-content\/uploads\/ds18b20.jpg 473w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><br>kt\u00f3ry to w\u0142a\u015bnie wykorzysta\u0142em w cz\u0119\u015bci pierwszej projektu.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Do ESP doda\u0142em trzyprzewodowy w\u0105\u017c diod RGB sk\u0142adaj\u0105cy si\u0119 z 30 sztuk.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"225\" src=\"http:\/\/www.automatyka-malin.pl\/wp-content\/uploads\/ws2812b-300x225.jpg\" alt=\"\" class=\"wp-image-218\" srcset=\"http:\/\/www.automatyka-malin.pl\/wp-content\/uploads\/ws2812b-300x225.jpg 300w, http:\/\/www.automatyka-malin.pl\/wp-content\/uploads\/ws2812b-768x576.jpg 768w, http:\/\/www.automatyka-malin.pl\/wp-content\/uploads\/ws2812b.jpg 800w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><br>Ka\u017cd\u0105 z nich mo\u017cemy zaprogramowa\u0107 na dowolny kolor.<br>Ten pasek diod, kt\u00f3ry wykorzysta\u0142em zasilany jest napi\u0119ciem 5V DC i potrzebuje troch\u0119 mocy.<br>Dlatego do zasilania ich oraz ESP trzeba u\u017cy\u0107 zasilacza stabilizowanego 5V DC o wydajno\u015bci pr\u0105dowej co najmniej 4A (20W). Ja wykorzysta\u0142em 25W firmy Mean Well.<br>Zabaw\u0119 z programowaniem zacz\u0105\u0142em od wgrania firmwaeru.<br>Aby to zrobi\u0107 wchodzimy na stron\u0119 <a href=\"https:\/\/nodemcu-build.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">nodemcu<\/a>.<br>Nast\u0119pnie dwa razy wpisujemy sw\u00f3j adres e-mail i zaznaczamy opcje jak poni\u017cej.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"286\" height=\"300\" src=\"http:\/\/www.automatyka-malin.pl\/wp-content\/uploads\/nodemcu-286x300.jpg\" alt=\"\" class=\"wp-image-219\" srcset=\"http:\/\/www.automatyka-malin.pl\/wp-content\/uploads\/nodemcu-286x300.jpg 286w, http:\/\/www.automatyka-malin.pl\/wp-content\/uploads\/nodemcu.jpg 699w\" sizes=\"auto, (max-width: 286px) 100vw, 286px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Ko\u0144czymy naciskaj\u0105c <em><strong>Start your build<\/strong><\/em>.<br>Po kilku minutach powinny na naszej poczcie pojawi\u0107 si\u0119 dwie wiadomo\u015bci.<br>Pierwsza informuj\u0105ca o tworzeniu plik\u00f3w, a kilka minut p\u00f3\u017aniej druga &#8211; ju\u017c z linkami do pobrania dw\u00f3ch plik\u00f3w.<br>Jeden to <em><strong>nodemcu&#8230;float.bin<\/strong><\/em>, a drugi <em><strong>nodemcu&#8230;integer.bin<\/strong><\/em>.<br>Do ESP wgrywamy tylko jeden z tych dw\u00f3ch plik\u00f3w.<br>Je\u015bli chcemy korzysta\u0107 z oblicze\u0144 tylko na liczbach ca\u0142kowitych wtedy wgrywany plik <em><strong>nodemcu&#8230;integer.bin<\/strong><\/em>.<br>Do wgrywania wybranego pliku (firmwaeru) u\u017cywamy odpowiedniej wersji programu <a href=\"https:\/\/github.com\/marcelstoer\/nodemcu-pyflasher\/releases\" target=\"_blank\" rel=\"noreferrer noopener\">NodeMcu-PyFlasher<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Oczywi\u015bcie pr\u0119dzej trzeba pod\u0142\u0105czy\u0107 ESP do portu USB.<br>Uruchamiamy nasz <strong><em>NodeMcu-PyFlasher<\/em><\/strong> i odpowiednio ustawiamy. Trzeba jednak pami\u0119ta\u0107 o prawid\u0142owym wyborze portu USB.<br>Po zako\u0144czeniu wgrywania firmwaeru potrzebujemy program <a href=\"https:\/\/esp8266.ru\/esplorer\/\" target=\"_blank\" rel=\"noreferrer noopener\">ESPlorer<\/a> do programowania ESP.<br>Po pobraniu, rozpakowujemy go do jakiego\u015b katalogu i uruchamiamy plik <strong><em>ESPlorer.jar<\/em><\/strong>.<br>Uwaga: trzeba mie\u0107 zainstalowan\u0105 Jav\u0119.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"178\" src=\"http:\/\/www.automatyka-malin.pl\/wp-content\/uploads\/esplorer-1-300x178.jpg\" alt=\"\" class=\"wp-image-249\" srcset=\"http:\/\/www.automatyka-malin.pl\/wp-content\/uploads\/esplorer-1-300x178.jpg 300w, http:\/\/www.automatyka-malin.pl\/wp-content\/uploads\/esplorer-1-1024x609.jpg 1024w, http:\/\/www.automatyka-malin.pl\/wp-content\/uploads\/esplorer-1-768x457.jpg 768w, http:\/\/www.automatyka-malin.pl\/wp-content\/uploads\/esplorer-1.jpg 1514w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Teraz mo\u017cemy zacz\u0105\u0107 przygod\u0119 z ESP.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pierwszym krokiem jest wgranie pliku <strong><em>init.lua<\/em><\/strong>.<br>Plik ten jest jako pierwszy uruchamiany podczas startu ESP.<br>Zwykle ten plik jest zapisany w ESPlorerze, trzeba go tylko otworzy\u0107 i mo\u017cemy go modyfikowa\u0107.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">U g\u00f3ru po lewej stronie mamy przycisk <strong><em>Open<\/em><\/strong>.<br>Piszemy skrypt, a nast\u0119pnie wgrywamy go do ESP naciskaj\u0105c <strong><em>Save to ESP<\/em><\/strong> znajduj\u0105cy si\u0119 na dole po lewej stronie.<br>Co\u015b wi\u0119cej o j\u0119zyku <a href=\"https:\/\/www.lua.org\/pil\/contents.html\" target=\"_blank\" rel=\"noreferrer noopener\">lua<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A teraz kilka plik\u00f3w z projektu.<br>Zaczniemy od pliku <strong><em>init.lua<\/em><\/strong>, kt\u00f3ry musi by\u0107 i jest on wykonywany podczas uruchamiania ESP.<\/p>\n\n\n\n<p><textarea class=\"wpcf7-form-control wpcf7-textarea\" style=\"line-height: 15px !important; height: 230px;\" name=\"your-message\" readonly=\"readonly\" aria-invalid=\"false\" wrap=\"soft\">node.compile(\"rgb.lua\")\r\nnode.compile(\"http_temp.lua\")\r\n\r\nwybor = 1\r\nkk = 1\r\ndod = 1\r\nnr = 1\r\nzie = 0\r\ncze = 0\r\nnie = 200\r\nszybk = 100\r\nszybk2 = 100\r\n\r\npolaczono = 0\r\nstation_cfg={}\r\n\r\nif file.open(\"dane.lua\",\"r\") then\r\n    zie = tonumber(file.readline(\"*n\"))\r\n    cze = tonumber(file.readline(\"*n\"))\r\n    nie = tonumber(file.readline(\"*n\"))\r\n    wybor = tonumber(file.readline(\"*n\"))\r\n    szybk = tonumber(file.readline(\"*n\"))\r\n    szybk2 = tonumber(file.readline(\"*n\"))\r\n    file.close()\r\nelse\r\n    zie = 0\r\n    cze = 0\r\n    nie = 200  \r\n    wybor = 1\r\n    szybk = 100\r\n    szybk2 = 100\r\nend\r\n\r\nfunction konfig()\r\n    wifi.setmode(wifi.STATION)\r\n    if lacze < 5 then\r\n        station_cfg.ssid=\"*****\"\r\n        station_cfg.pwd=\"*****\"\r\n        print(\"UPC\")\r\n    else\r\n        station_cfg.ssid=\"*****\"\r\n        station_cfg.pwd=\"*****\"\r\n        print(\"Livebox\")\r\n    end\r\n    station_cfg.save=true\r\n    wifi.sta.config(station_cfg)\r\n\r\n    if lacze > 9 then\r\n        lacze = 0\r\n    end\r\nend\r\n\r\ndofile(\"serwer.lc\")\r\n--dofile(\"rgb.lc\")\r\n\r\ntmr.alarm(1, 600000, 1, function()\r\n  if wifi.sta.getip() == nil then\r\n    konfig()\r\n    polaczono = 0\r\n    lacze = lacze + 1\r\n    print(\"Brak polaczenia, lacze...\"..lacze+1)\r\n  else\r\n    tmr.stop(1)\r\n    polaczono = 1\r\n    print(\"Uzyskano polaczenie z IP: \"..wifi.sta.getip())\r\n    print(\"Polaczenie = \"..polaczono)\r\n    dofile(\"termometr.lc\") \r\n    dofile(\"http_temp.lc\")\r\n  end\r\nend)\r\n<\/textarea><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">W pierwszej linii mamy <strong><em>node.compile(\\&#8221;rgb.lua\\&#8221;)<\/em><\/strong>.<br>Jest to funkcja, kt\u00f3ra utworzy nam nowy plik o tej samej nazwie ale z rozszerzeniem <em>lc<\/em>. Plik ten b\u0119dzie skompilowany dzi\u0119ki czemu b\u0119dzie mia\u0142 mniejsz\u0105 obj\u0119to\u015b\u0107. Plik ten lub ka\u017cdy inny wywo\u0142ujemy komend\u0105 <strong><em>dofile(\\&#8221;plik.lc\\&#8221;)<\/em><\/strong> lub <strong><em>dofile(\\&#8221;plik.lua\\&#8221;)<\/em><\/strong>.<br>Gdy u\u017cyli\u015bmy w\/w przyk\u0142adu, to po pierwszym uruchomieniu programu mo\u017cemy usun\u0105\u0107 plik z rozszerzeniem <em>lua<\/em> gdy\u017c nie b\u0119dzie on nam ju\u017c potrzebny oraz usun\u0105\u0107 lini\u0119 <strong><em>node.compile(\\&#8221;plik.lua\\&#8221;)<\/em><\/strong> z pliku <strong><em>init.lua<\/em><\/strong>, po czym ponownie go wgra\u0107.<br>Aby usun\u0105\u0107 ju\u017c nie potrzebny plik nale\u017cy w panelu ESPlorer ca\u0142kiem po prawej stronie nacisn\u0105\u0107 <em>Reload<\/em>. Wtedy po chwili poni\u017cej pojawi si\u0119 lista wszystkich plik\u00f3w znajduj\u0105cych si\u0119 w pami\u0119ci ESP.<br>Na interesuj\u0105cym nas pliku naciskamy prawym przyciskiem myszy. Pojawi si\u0119 lista, z kt\u00f3rej wybieramy <em>Remowe<\/em> <strong><em>plik.lua<\/em><\/strong>.<br>Poni\u017cej w pliku init.lua mamy funkcj\u0119 <strong><em>file.open(\\&#8221;dane.lua\\&#8221;,\\&#8221;r\\&#8221;)<\/em><\/strong>.<br>S\u0142u\u017cy ona do otwierania pliku w tym przypadku tylko do odczytu.<br>W nast\u0119pnej linii widzimy <strong><em>zie = tonumber(file.readline(\\&#8221;*n\\&#8221;))<\/em><\/strong>.<br>Odczytujemy w niej jedn\u0105 lini\u0119 z otwartego pliku, a nast\u0119pnie zamieniamy j\u0105 na liczb\u0119 ca\u0142kowit\u0105.<br>Jest to o tyle istotne, \u017ce je\u015bli mamy liczb\u0119 np. 1 i zapiszemy j\u0105 do pliku, to po ponownym jej odczycie b\u0119dziemy mieli warto\u015b\u0107 1 ale jako string w kodzie ASCII czyli 49.<br>I jak to bywa, po przeczytaniu pliku musimy go zamkn\u0105\u0107 korzystaj\u0105c z funkcji: <strong><em>file.close()<\/em><\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fuckcja <strong><em>konfig()<\/em><\/strong><\/p>\n\n\n\n<p><textarea class=\"wpcf7-form-control wpcf7-textarea\" style=\"line-height: 15px !important; height: 230px;\" name=\"your-message\" readonly=\"readonly\" aria-invalid=\"false\" wrap=\"soft\">function konfig()\r\n    wifi.setmode(wifi.STATION)\r\n    if lacze < 5 then\r\n        station_cfg.ssid=\"*****\"\r\n        station_cfg.pwd=\"*****\"\r\n        print(\"UPC\")\r\n    else\r\n        station_cfg.ssid=\"*****\"\r\n        station_cfg.pwd=\"*****\"\r\n        print(\"Livebox\")\r\n    end\r\n    station_cfg.save=true\r\n    wifi.sta.config(station_cfg)\r\n<\/textarea><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Funkcja s\u0142u\u017cy do konfiguracji po\u0142\u0105czenia z wifi.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">W <em>wifi.setmode()<\/em> mamy do wyboru <em>Access Point<\/em> oraz <em>Station Mode<\/em>.<br>Je\u015bli wybierzemy <em>Access Point<\/em> wtedy nasz modu\u0142 stanie si\u0119 hostem i b\u0119dziemy si\u0119 z nim \u0142\u0105czy\u0107 z innych urz\u0105dze\u0144.<br>Mnie interesowa\u0142o po\u0142\u0105czenie do ju\u017c istniej\u0105cego hosta wi\u0119c wybra\u0142em <em>Station Mode<\/em> czyli <strong><em>wifi.setmode(Station Mode)<\/em><\/strong>.<br>Nast\u0119pnie poda\u0142em nazw\u0119 sieci i has\u0142o:<br>station_cfg.ssid=\\&#8221;*****\\&#8221;<br>station_cfg.pwd=\\&#8221;*****\\&#8221;.<br>Poniewa\u017c korzystam z dw\u00f3ch r\u00f3\u017cnych host\u00f3w, wi\u0119c najpierw wykonuj\u0119 pi\u0119\u0107 pr\u00f3b po\u0142\u0105czenia si\u0119 z jednym,<br>a gdy to si\u0119 nie uda pr\u00f3buj\u0119 si\u0119 po\u0142\u0105czy\u0107 z drugim.<br>Po po\u0142\u0105czeniu z jednym z nich wywo\u0142uj\u0119 <strong><em>station_cfg.save=true<\/em><\/strong> &#8211; funkcja ta zapisuje dane do pami\u0119ci flash.<br>Nast\u0119pnie wywo\u0142uj\u0119 <strong><em>wifi.sta.config(station_cfg)<\/em><\/strong> aby uruchomi\u0107 po\u0142\u0105czenie z hostem wifi.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Teraz zajmiemy si\u0119 cyklicznym wywo\u0142ywaniem funkcji lub pliku.<br>S\u0142u\u017cy to tego <strong><em>tmr.alarm(1, 600000, 1, function() end))<\/em><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><textarea class=\"wpcf7-form-control wpcf7-textarea\" style=\"line-height: 15px !important; height: 230px;\" name=\"your-message\" readonly=\"readonly\" aria-invalid=\"false\" wrap=\"soft\">tmr.alarm(1, 600000, 1, function()\r\n  if wifi.sta.getip() == nil then\r\n    konfig()\r\n    polaczono = 0\r\n    lacze = lacze + 1\r\n    print(\"Brak polaczenia, lacze...\"..lacze+1)\r\n  else\r\n    tmr.stop(1)\r\n    polaczono = 1\r\n    print(\"Uzyskano polaczenie z IP: \"..wifi.sta.getip())\r\n    print(\"Polaczenie = \"..polaczono)\r\n    dofile(\"termometr.lc\") \r\n    dofile(\"http_temp.lc\")\r\n  end\r\nend)\r\n<\/textarea><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pierwszy parametr to numer Timera.<br>Mo\u017cemy u\u017cy\u0107 do 7 Timer\u00f3w (od 0 do 6).<br>Drugi parametr to czas w milisekundach i okre\u015bla, co ile milisekund ma by\u0107 wywo\u0142ywana funkcja.<br>Nast\u0119pnie okre\u015blamy jak Timer ma by\u0107 wywo\u0142ywany:<br><strong><em>tmr.ALARM_SINGLE<\/em><\/strong> &#8211; alarm jednorazowy (bez potrzeby wywo\u0142ywania <strong><em>tmr.unregister ())<\/em><\/strong><br><strong><em>tmr.ALARM_SEMI<\/em><\/strong> &#8211; r\u0119czne powtarzanie alarmu (wywo\u0142anie <strong><em>tmr.start ()<\/em><\/strong> w celu ponownego uruchomienia)<br><strong><em>tmr.ALARM_AUTO<\/em><\/strong> &#8211; automatycznie powtarza alarm.<br>Skoro odczytujemy plik z pami\u0119ci, to musimy go te\u017c w niej utworzy\u0107.<br>Robimy to za pomoc\u0105 <strong><em>file.open(\\&#8221;plik.lua\\&#8221;,\\&#8221;w+\\&#8221;)<\/em><\/strong>.<br>Pierwszy parametr to nazwa pliku, a drugi otwiera plik tekstowy do aktualizacji (odczytu i zapisu), najpierw obcinaj\u0105c plik do zerowej d\u0142ugo\u015bci, je\u015bli istnieje lub tworzy plik, je\u015bli nie istnieje.<br>Skoro plik ju\u017c jest otworzony, wi\u0119c mo\u017cemy w nim zapisa\u0107 dane u\u017cywaj\u0105c <strong><em>file.writeline(string.format(\\&#8221;%d\\\\n%d\\\\n%d\\\\n%d\\\\n\\&#8221;,zie,cze,nie,zapis))<\/em><\/strong>, a nast\u0119pnie <strong><em>file.close()<\/em><\/strong> zamykamy plik.<br>Jak widzimy String zapisany do pliku jest sformatowany jako Integer (%d).<br>W moim przypadku musia\u0142em mie\u0107 pewno\u015b\u0107 aby zmienna zapisana w pliku by\u0142a sformatowana jako Integer, a nie String.<br>I tu z pomoc\u0105 przysz\u0142a mi funkcja <strong><em>zapis = tonumber(zmienna)<\/em><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><textarea class=\"wpcf7-form-control wpcf7-textarea\" style=\"line-height: 15px !important; height: 45px;\" name=\"your-message\" readonly=\"readonly\" aria-invalid=\"false\" wrap=\"soft\">            if _GET.Zapisz == 'Zapisz' then\n                zie = tonumber(_GET.rgbG)\n<\/textarea><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Jak na pocz\u0105tku artyku\u0142u wspomnia\u0142em projekt wysy\u0142a dane mi\u0119dzy innymi ze zmierzon\u0105 przez DS18B20 temperatur\u0105 na m\u00f3j serwer, a tam one s\u0105 obrabiane i przetwarzane.<br>S\u0142u\u017cy do tego plik <strong><em>http_temp.lc<\/em><\/strong>, kt\u00f3ry jest wywo\u0142ywany co 10 minut w <strong><em>init.lua<\/em><\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Funkcja <strong><em>http_temp.lc<\/em><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><textarea class=\"wpcf7-form-control wpcf7-textarea\" style=\"line-height: 15px !important; height: 230px;\" name=\"your-message\" readonly=\"readonly\" aria-invalid=\"false\" wrap=\"soft\">conn=net.createConnection(net.TCP, 0)\nconn:on(\"receive\", function(conn, pl) \n--    print(\"Odbieranie\\n\"..pl)\nend)\n\nconn:on(\"connection\", function(conn) \n    print(\"Polaczono\\n\")\n    conn:send(\"GET \/esp8266.php?temperatura=\"..cels..\" HTTP\/1.1\\r\\n\")\n    conn:send(\"Host: www.automatyka-malin.pl\\r\\n\")\n    conn:send(\"Connection: close\\r\\n\")\n    conn:send(\"Accept: *\/*\\r\\n\")\n    conn:send(\"User-Agent: Mozilla\/5.0 \\r\\n\")\n    conn:send(\"\\r\\n\")\nend)\n\nconn:on(\"sent\",function(conn)\n    print(\"Wysylam\\n\")\n--    conn:close()\nend)\n\nconn:on(\"disconnection\", function(conn)\n    print(\"Rozlaczono\")\nend)\n<\/textarea><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Jak zwr\u00f3cimy uwag\u0119 w jednej linii jest conn:send(\\&#8221;GET \/esp8266.php?temperatura=\\&#8221;..cels..\\&#8221; HTTP\/1.1\\r\\n\\&#8221;) gdzie cels jest to zmienna przechowuj\u0105ca odczytan\u0105 temperatur\u0119.<br>Odczytujemy j\u0105 przez wywo\u0142anie pliku <strong><em>temperatura.lc<\/em><\/strong> w <strong><em>init.lua<\/em><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><textarea class=\"wpcf7-form-control wpcf7-textarea\" style=\"line-height: 15px !important; height: 150px;\" name=\"your-message\" readonly=\"readonly\" aria-invalid=\"false\" wrap=\"soft\">pin = 5\r\nds18b20.setup(pin)\r\nds18b20.setting({\"28:64:6:4A:8:0:0:43\"},9)\r\nds18b20.read(\r\n    function(ind,rom,res,temp,tdec,par)\r\n    cels = temp\r\n    end,{})\r\n    \r\ncollectgarbage(\"stop\")<\/textarea><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Jak widzimy w pierwszej linii mamy pin=5.<br>Tutaj zdefiniowa\u0142em pin, na kt\u00f3rym odbywa si\u0119 komunikacja pomi\u0119dzy ESP8266 oraz DS18B20.<br>W trzeciej linii jest <strong><em>ds18b20.setting({\\&#8221;28:64:6:4A:8:0:0:43\\&#8221;},9)<\/em><\/strong>.<br>W pierwszym parametrze podaj\u0119 adres czujnika.<br>Je\u015bli mamy tylko jeden czujnik mo\u017cemy wpisa\u0107 Nil.<br>Drugi parametr odpowiada za rozdzielczo\u015b\u0107 pomiaru w bitach od 9-12. Dok\u0142adno\u015b\u0107 pomiaru jest okupiona szybko\u015bci\u0105.<br>W nast\u0119pnej linii odczytywane jest kilka parametr\u00f3w.<br>Dla mnie wa\u017cnym by\u0142 <strong><em>temp<\/em><\/strong>. Jest to warto\u015b\u0107 temperatury. Warto\u015b\u0107 ta jest nast\u0119pnie zapisana w cels. Po czym zostaje ona wys\u0142ana na serwer.<br>W ostatniej linii jest <strong><em>collectgarbage(\\&#8221;stop\\&#8221;)<\/em><\/strong>.<br>Chodzi o to aby niepotrzebnie nie przechowywa\u0107 w pami\u0119ci \u015bmieci.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Projekt sk\u0142ada si\u0119 z dw\u00f3ch cz\u0119\u015bci:1. Termometru cyfrowego, kt\u00f3ry wysy\u0142a dane na serwer, a tam one s\u0105 przetwarzane i wy\u015bwietlane;2.<\/p>\n","protected":false},"author":1,"featured_media":200,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1045","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-bez-kategorii"],"_links":{"self":[{"href":"http:\/\/www.automatyka-malin.pl\/index.php?rest_route=\/wp\/v2\/posts\/1045","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.automatyka-malin.pl\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.automatyka-malin.pl\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.automatyka-malin.pl\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.automatyka-malin.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1045"}],"version-history":[{"count":32,"href":"http:\/\/www.automatyka-malin.pl\/index.php?rest_route=\/wp\/v2\/posts\/1045\/revisions"}],"predecessor-version":[{"id":1499,"href":"http:\/\/www.automatyka-malin.pl\/index.php?rest_route=\/wp\/v2\/posts\/1045\/revisions\/1499"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/www.automatyka-malin.pl\/index.php?rest_route=\/wp\/v2\/media\/200"}],"wp:attachment":[{"href":"http:\/\/www.automatyka-malin.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1045"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.automatyka-malin.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1045"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.automatyka-malin.pl\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1045"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}