Связь с Гуглом Код (C++): connection = nil do print('Start at '..tmr.now()) conn=net.createConnection(net.TCP, 0) --print("Connection = "..conn) conn:on("connection",function(conn, payload) conn:send("HEAD / HTTP/1.1\r\n".. "Host: google.com\r\n".. "Accept: */*\r\n".. "User-Agent: Mozilla/4.0 (compatible; esp8266 Lua;)".. "\r\n\r\n") connection = conn end) conn:on("receive", function(conn, payload) print('\nRetrieved in '..((tmr.now()-t)/1000)..' milliseconds.'..t) print('Google says it is '..string.sub(payload,string.find(payload,"Date: ") +6,string.find(payload,"Date: ")+35)) conn:close() end) t = tmr.now() conn:connect(80,'google.com') print("Connection = ") print(conn) print(connection) end Проверка DS18b20 Код (C++): require('ds18b20') do gpio2 = 4 -- "Temperature : " .. ds18b20.read(addres[1]) .." ; " ds18b20.setup(gpio2) addres={} addres=ds18b20.addrs() print("Total DS18B20 sensors: "..table.getn(addres)) for k, v in pairs(addres) do print("Sensor "..k.." = "..ds18b20.read(addres[v]).." C") end ds18b20 = nil package.loaded["ds18b20"]=nil collectgarbage() end Blink Код (C++): do pin = 3 gpio.mode(pin,gpio.OUTPUT) gpio.write(pin,gpio.LOW) --gpio.mode(pin,gpio.INPUT) --print(gpio.read(pin)) tmr.delay(5000000) --gpio.mode(pin,gpio.OUTPUT) gpio.write(pin,gpio.HIGH) gpio.mode(pin,gpio.INPUT) print(gpio.read(pin)) end Get Time Код (C++): do function getTime() conn=net.createConnection(net.TCP, 0) conn:on("connection",function(conn, payload) conn:send("HEAD / HTTP/1.1\r\n".. "Host: google.com\r\n".. "Accept: */*\r\n".. "User-Agent: Mozilla/4.0 (compatible; esp8266 Lua;)".. "\r\n\r\n") connection = conn end) conn:on("receive", function(conn, payload) time = string.sub(payload,string.find(payload,"Date: ")+23,string.find(payload,"Date: ")+31) hour = string.sub(time, 0, 2) + 3 minute = string.sub(time, 4,5) + 0 second = string.sub(time, 7,9) + 0 print(hour.."-"..minute.."-"..second) noconnect, trying, restarting =false, 0, 0 conn:close() end) conn:connect(80,'ya.ru') end getTime() end
Игорь, поясните еще один момент. название топика в скетче ардуино может быть только числовое? или текстовые названия то же проходят? Пока сделал так, все работает, но хотелось бы 14 и 15 топик обозвать смысловыми значениями например "dhtt", "dhth".. Код (C++): if(millis() > timeToCheckPins) { // Если пришло время проверки, то определяем новое timeToCheckPins = millis()+ DELAY_TO_NEXT_CHECK_PINS; String t1 = (String) t; // Формируем стринг для отправки через UART String h1 = (String) h; // Формируем стринг для отправки через UART portOne.print("14:"); portOne.println(t1); portOne.print("15:"); portOne.println(h1); String toUART = (String) pinMassive[nextPin][0]; // Формируем стринг для отправки через UART toUART += ":"; toUART += (String) pinMassive[nextPin][1]; portOne.println(toUART); nextPin++; // Выбираем пин для чтения в следующий раз if (nextPin >=2) { // Есди дошли до последнего - возвращаемся к первому nextPin = 0; }
Только числовое. Так задумано, потому как есть жестокая связь между ногами ардуино и тем что к ним прицеплено В прининцпе - можно сделать и текстовое. Но это сами - если очень нужно будет Когда разберетесь с функциями парсинга на Lua.
С этим разобрались..... Теперь про обратную связь. Ваш скрипт для esp позволяет передать числовые значения с плаваующей точкой на ардуино? или что то нужно дописывать самому ?
Всё сложнее чем казалось. Нужно подписываться еще на один топик в брокере, выковыривать название субтопика (символьное), потом передавать название субтопика и данные на дуину и разбирать его там. Короче сейчас, без знания Луа это кажется не выполнимым. Придется потратить месяцок, два, на то что бы хоть немного разобраться в языке.
Ну это ааааааааааашипка. Скрипт подписан на все топики типа arduino01/# и разбирает их на составные части. Модулю со стороны ОпенХаба идут сообщения с топиками, типа arduino01/11 - значение 12.34 или arduino01/3 - значение 24.6, а скрипт их превращает в 11:12.34 и 3:24.6 и в таком виде гонит в Ардуино.
Это я понял.. Понять бы ещё Как правильно сделать .. Подписаться на все топики на брокере и потом отсеивать нужные или есть возможность подписаться всего на два разных топика из одного скрипта И внести данные с каждого в свои стринги?
Так, думаю, лучше. Так у меня в скрипте уже подписка оформлена, кажется. Я уж и забыл как там сделано. Используйте MqttSpy для наладки и тестирования! Шлите топики на ESP и смотрите что получается. А фильтровать можно и в ESP и на Ардуино - что проще и привычнее Вам. А можно вообще ничего лишнего не отправлять
Немного тоскливое видео. Мне показалось, что авторы снимают его ради съемок и не понимают особенностей NodeMCU. Надо, надо сделать соответствующую тему для новичков....
Зачем усложнять простое? Есть Arduino IDE for ESP826, все то же самое простой язык море примеров, покрывающее базовые потребности любителей. PS проект на GitHub постоянно обновляется и расширяется
Нравится мне. Не отношусь к фанатам Arduino IDE. А на счёт усложнять... Сначала этот ананас надо попробовать. Вдруг окажется что он вкусный и простой.
Когда можно ожидать от Вас курс введения в Lua? Зная как Вы пишете, будет интересно. В конце марта поеду Маман теплицу автоматизировать. Как раз хочется реализовать на ESP+NodeMCU. Задача элементарная. Открывать форточки в теплице в зависимости от температуры и отслеживать это через инет ( не имя внешнего IP и домашнего сервера, т.е посредством свободного облачного mqtt )
А не подскажет ли кто, как бороться с тем, что Esplorer (v0.2.0-rc2) не с первого раза соединяется с ESP (прошивка nodemcu_integer_0.9.6-dev_20150704.bin). Ругается, что не смогла опознать прошивку. После нескольких переключений скорости туда-сюда или нескольких подключений/отключений порта все-таки соединяется и после соединения работает нормально, но раздражает такое дело жутко. Причем у меня два вида плат, ESP-01 и NodeMCU DevKit v0.9, а поведение абсолютно одинаковое. Это версия Esplorer такая, или стоит поискать другую версию прошивки nodemcu?
Где то мельком видел что нужно отключить автоопределение прошивки, честно говоря не искал где это делается .. Возможно это как раз то что Вам нужно если напрягает.