ESP8266. Narodmon.ru

Отправка данных на сервис narodmon.ru. Простой narodmon.lua скрипт для отправки данных на сервис «Народный мониторинг» для nodemcu. «Народный мониторинг» — это Геоинформационный SaaS сервис по отображению на карте мира и контролю (на ПК, смартфонах и других гаджетах) показаний датчиков своих участников (температуры, влажности, атм.давления, скорости и направления ветра, радиации, энергопотребления и многих других), а также частных и городских веб-камер для публичного или частного(приватного) просмотра. 

local dataN = "#XX:XX:XX:XX:XX:XX\n"
dataN = dataN.."#T085#"..t.."\n#T2302#"..t2302.."\n#Hum#"..h.."\n#Press#"..p.."\n"
dataN = dataN.."##\n"
    print(dataN)
    conn=net.createConnection(net.TCP, 0)
    conn:on("connection",function(conn, payload)
                conn:send(dataN)
                end)
    conn:on("receive", function(conn, payload)
        print('Narodmon says '..payload)
        conn:close()
        end)
    conn:connect(8283,'narodmon.ru')

Код можно подключить к уже существуему проекту метеостанции с небольшими изменениями. Для вашего проекта необходимо ввести MAC адрес устройства в строку «#XX:XX:XX:XX:XX:XX» и внести ряд изменений в другие файлы.


Файл do.lua

tmr.alarm(1, 300000, 1, function()
 print("-----------------------------------")
 print("Читаем датчики")
 dofile("bmp085.lua")
 collectgarbage()
 dofile("dht22.lua")
 collectgarbage()
 print(string.format("t2302 = %s;t085 = %s;h = %s;p = %s",t2302,t,h,p))
 collectgarbage()
 dofile("thingspeak.lua")
 collectgarbage()
 dofile("narodmon.lua")
 collectgarbage()
 end
 )

Файл bmp085.lua

bmp085 = require("BMP")
sda_pin = 1
scl_pin = 2

bmp085.init(sda_pin, scl_pin)
press = bmp085.getUP(oss)
--print(string.format("p = %d",press))
t = bmp085.getUT(num_10x)
--print(string.format("t = %s",t))
local p_dec = (math.floor((press*75)/10000))
local p_adec = (((press*75)%10000)/1000)
p = p_dec.."."..p_adec

-- Убираем мусор
bmp085 = nil
package.loaded["BMP"]=nil
collectgarbage()

Файл dht22.lua

pin = 7

local status, temp, humi, temp_dec, humi_dec = dht.read(pin)
if status == dht.OK then
    -- подготовка строчных переменных для модулей server и thingspeak
    h = (math.floor(humi)).."."..(humi_dec/100)
    t2302 = (math.floor(temp)).."."..(math.abs(temp_dec/100))
    --print(string.format("t2302 = %s;h = %s",t2302,h))

elseif status == dht.ERROR_CHECKSUM then
    print( "DHT Checksum error." )
elseif status == dht.ERROR_TIMEOUT then
    print( "DHT timed out." )
end

Нормальная работа устройства выглядит следующим образом.

Работа кода отправки на сервис narodmon.ru