Пример отправки данных (модуль WEMOS D1 mini)

Пример показывает отправку показаний счетчиков воды на модуле ESP8266.Используется модуль WEMOS D1 mini.
1. Скачайте ESPlorer для загрузке ваших скриптов.
2. Скачайте NodeMCU Flasher для загрузки NodeMCU.
3. Соберите и скачайте прошивку NodeMCU (включите модули HTTP, SJSON, file, GPIO, net, node, timer, UART, WiFi)

Установите на модуль прошивку NodeMCU. Примеров по прошивке ESP8266 в сети очень много.Данный пример работоспособен но не содержит многих проверок, например проверка отправки или дребезга контактов.
Создайте файл init.lua и поместите туда этот код.

LED_PIN = 4;--вывод к которому подключен светодиод
HOT_PIN = 1;--вывод контактов счетчика 1
COLD_PIN = 2;--вывод контактов счетчика 2
C_SSID = "Ваша сеть";
C_PWD = "Ключ вашей сети";
C_USKEY = "Ваш ключ uskey";
C_BASEKEY = "Ваш ключ basekey";
C_TIMEOUT_CONNECT = 10000;--время ожидания подключения к сети
C_DELAY_CONNECT = 15000;-- период передачи данных
C_HOT_COUNT = 0;
C_COLD_COUNT = 0;
C_HOT_IMP = 0;
C_COLD_IMP = 0;
configuration = {};
T1 = tmr.create();
--Настройка GPIO D1-горячий D2-холодный
gpio.mode(LED_PIN,gpio.OUTPUT);
gpio.mode(HOT_PIN,gpio.INPUT,gpio.PULLUP);
gpio.mode(COLD_PIN,gpio.INPUT,gpio.PULLUP);
--Мигание светодиода пока идет подключение
T1:alarm(200, 1, function() 
if (gpio.read(LED_PIN) == 0) then
     gpio.write(LED_PIN, gpio.HIGH);
     else
     gpio.write(LED_PIN, gpio.LOW);
     end;
end);
dofile ("main.lua")
Установите свои ключи uskey, basekey, имя сети и пароль. C_TIME_CONNECT- задает время после которого будет произведена проверка подключения к сети. C_DELAY_CONNECT- период передачи данных в канал.Для контроля запуска скрипта запускается таймер.В обработке функции таймера мигаем светодиодом.
Создайте файл main.lua и поместите туда этот код.
--Подключение к точке wifi
wifi.setmode(wifi.STATION);
scfg={};
scfg.ssid=C_SSID;
scfg.pwd=C_PWD;
scfg.auto=true;
scfg.save=true;
wifi.sta.config(scfg);
wifi.sta.connect();
--Ожидание подключения
tmr.create():alarm(C_TIMEOUT_CONNECT, tmr.ALARM_SINGLE, function() 
if (wifi.sta.getip() == nil) then
--Ошибка подключения
 T1:stop();
 T1:unregister();
 gpio.write(LED_PIN, gpio.LOW);
 else
--Подключение прошло удачно
 T1:stop()
 T1:unregister();
 gpio.write(LED_PIN, gpio.HIGH);
 --Считывение последней записи канала
 t=tmr.create();
 t:alarm(1000, tmr.ALARM_AUTO, function ()
 http.get("http://www.thingopen.ru/feeds.php?uskey="..C_USKEY.."&basekey="..C_BASEKEY.."&results=1", nil, function(code, data)
    if (code ~= 200) then
     gpio.write(LED_PIN, gpio.LOW);
    else
    t:stop();
    t:unregister();
    gpio.write(LED_PIN, gpio.HIGH);
--Инициализация счетчиков
    t = sjson.decode(data)
    C_COLD_COUNT = t["feeds"][1]["Field1"];
    C_HOT_COUNT = t["feeds"][1]["Field2"];
    cold_s = 0;
    hot_s = 0;
--Опрос GPIO D1,D2
    tpin=tmr.create();
    tpin:alarm(500, tmr.ALARM_AUTO, function () 
        if ((gpio.read(COLD_PIN) == 0) and (cold_s == 1)) then
        C_COLD_COUNT = C_COLD_COUNT+1;
        C_COLD_IMP = 1;
    end;
        if ((gpio.read(HOT_PIN) == 0) and (hot_s == 1)) then
        C_HOT_COUNT = C_HOT_COUNT+1;
        C_HOT_IMP = 1;
    end;
    cold_s = gpio.read(COLD_PIN);
    hot_s = gpio.read(HOT_PIN);
    end)
--Отправка данных на сервер
     tsend=tmr.create();
    tsend:alarm(C_DELAY_CONNECT, tmr.ALARM_AUTO, function () 
    gpio.write(LED_PIN, gpio.LOW);
        http.get("http://www.thingopen.ru/update.php?basekey="..C_BASEKEY.."&field1="..C_COLD_COUNT.."&field2="..C_HOT_COUNT.."&field3="..C_COLD_IMP.."&field4="..C_HOT_IMP, nil, function(code, data)
          C_HOT_IMP = 0;
          C_COLD_IMP = 0;
          gpio.write(LED_PIN, gpio.HIGH);
        if (data=="0") then
        --Ошибка передачи
        end
        if (data=="1") then
        --Передача прошла успешно
        end
        if (data=="LED_ON") then
        --Пример включения светодиода (включается в течении C_DELAY_CONNECT )
        gpio.write(LED_PIN, gpio.LOW);
        end
        end)
     end)
    end
   end)
  end)
 end;
end)
В зтом коде мы настраеваем модуль для подключения к вашей точки доступа. При успешном подключении выключаем светодиод и отправляем запрос на считывание последней записи канала.Извлекаем из полученной строки значения полей field1 и field2 и инициализируем счетчики.Запускаем таймер опроса портов каждые 500msl и при спаде на входе увеличиваем счетчики.Запускаем таймер передачи данных и каждые C_DELAY_CONNECT производим отправку.В данном примере при отправке данных и получении команды LED_ON включается светодиод модуля.
Загрузите скрипт в модуль используя ESPlorer.