ESP8266: отправка температуры на Народный мониторинг. Бюджетный вариант.

Тема в разделе "Глядите, что я сделал", создана пользователем ИгорьК, 3 мар 2015.

  1. ИгорьК

    ИгорьК Давно здесь

    Далас для уличной, внутренней температур и температуры системы отопления.
    А про dht Вы бы потише. Как Девелопер Вы бы не портили репутацию говеными железками :)
     
  2. Developer-RU

    Developer-RU Гик

    Я не спрашивал о качестве железок, вопрос был совсем в другом из начала темы (недоглядел что попал на 10-ю страницу)
     
  3. ИгорьК

    ИгорьК Давно здесь

    :) сурово...
     
  4. Developer-RU

    Developer-RU Гик

  5. ИгорьК

    ИгорьК Давно здесь

    Про три датчика ответил.
     
  6. alexvtule

    alexvtule Нерд

    Здравствуйте, господа!
    Давно читаю ваши темы ИгорьК по домашней автоматизации. Очень радует ваш подход к описанию и решению задач.
    Долго собирался я с мыслями о желаниях и потребностях по решению задач автоматизации в собственном жилище, и вот наконец созрел.
    Назаказывал кучу китайского барахла из того, что вы здесь рекомендавали и пытаюсь теперь воплотить первый проект - по отправке температуры на НАРМОНИТОРИНГ.
    Есть у меня вот такая железяка
    [​IMG]
    [​IMG]
    (для простоты прошивки и настройки купил несколько таких).
    Поставил драйвер CH340, скачал программу nodemcu-flasher-master, получил указанную здесь прошивку
    Загрузил прошивку в контроллер. Прошивка загрузилась полностью, плата помигала синим светодиодом, потом перестала. Ошибок не выскочило.
    После этого в поиске по сетям появлялась точка WiFi с открытым ключом доступа. Можно было к ней законнектиться.
    Скачал программу ESPlorer v 0.2.0 rc5, запустил и...
    долго разбирался с кнопками соединения и скоростью подключения.
    На скорости 9600 выдается сообщение:
    Код (C++):

    PORT OPEN 9600
    Communication with MCU..
    Пока не нажмешь кнопку RESET на плате, больше ничего не выводится. После нажатия выводится вот это:
    Код (C++):
    Got answer! Communication with MCU established.
    AutoDetect firmware...
    Can't autodetect firmware, because proper answer not received (may be unknown firmware).
    Please, reset module or continue.
    ¦8—ЩXHR¬|щp$>dl40x¤ююh‹IиЄґя
    НЗ®.ЖomHК)=nЉКєяьО¶Eь|vQ1
    Если нажать RESET еще раз вылетает:
    Код (C++):

    txW™H¤аґдz¶ШСI$rZщА$>|]й4
     
    И хоть обнажимайся - пишет только какую-то кракозябру.
    Если подключиться на скорости 115200 пишет вот это:
    Код (C++):
    PORT OPEN 115200
    Communication with MCU..Got answer! Communication with MCU established.
    AutoDetect firmware...
    Can't autodetect firmware, because proper answer not received (may be unknown firmware).
    Please, reset module or continue.
    ]„c„ы'
    do'њвдcpДЗdsdrd8ыgа‚lb'г|ДЊЋ‡sДc„ыgoо„c„ы'oЯdo'њвдcpДЗdsdrd8ыgа‚lb'г|ДЊЋ‡sДc„ыgoо
    NodeMCU custom build by frightanic.com
       branch: master
       commit: b96e31477ca1e207aa1c0cdc334539b1f7d3a7f0
       SSL: false
       modules: bit,file,gpio,mqtt,net,node,ow,tmr,uart,wifi
    build    built on: 2017-04-02 12:59
    powered by Lua 5.1.4 on SDK 2.0.0(656edbf)
    Вобщем кое как удалось на скорости 115200 загрузить файл init.lua вот с этим содержимым (из вашего поста), данные своей точки доступа я внес и MAC-адрес датчика придумал. Файл ds18b20.lua тоже загрузил.
    Код (C++):
    PORT OPEN 115200
    Communication with MCU..
    PORT OPEN 115200
    Communication with MCU..Got answer! Communication with MCU established.
    AutoDetect firmware...
    Can't autodetect firmware, because proper answer not received (may be unknown firmware).
    Please, reset module or continue.
    Њc„ыgoџdogњвдc8Д‡lsdrl8ыoаГ$b'
    г|„ЊЋЏrДc„ыgnз
    NodeMCU custom build by frightanic.com
       branch: master
       commit: b96e31477ca1e207aa1c0cdc334539b1f7d3a7f0
       SSL: false
       modules: bit,file,gpio,mqtt,net,node,ow,tmr,uart,wifi
    build    built on: 2017-04-02 12:59
    powered by Lua 5.1.4 on SDK 2.0.0(656edbf)
    work now!
    get t
    Got 85
    Got 85
    > Get Sleep By Timer
    Sleep Now!
    sd тут еще куча кракозябры
     
    и все - на этом лог от контроллера заканчивается, какие бы временные задержки я не ставил в параметрах, пока не нажмешь кнопку RESET на плате.
    Зарегистрировать датчик на сайте НАРМОНИТОРИНГА не получается - говорит, что он еще не отправлял данные.
    Как понять - подключается ли ESP8266 nodemcu к моей локальной сети - не знаю. IP-сканер ее не видит во всяком случае.
    Как узнать - отправляется ли куда-либо температура, мне тоже не понятно.
     
  7. ИгорьК

    ИгорьК Давно здесь

    1. 115200 - правильная скорость коммуникации с модулем. Во время загрузки он по своим (китайским) причинам меняет скорость а потом восстанавливает до 115200. Все хорошо.
    2. Чтобы модуль коннектился к Вашей сетке, ему нужно первоначально указать ее правильные данныее. В частности, в левом окне, без всяких загружаемых файлов написать следующее :

    Код (Lua):
    do
    wifi.setmode(wifi.STATION)
    wifi.sta.config("ВашаТочкаДоступа","Ваш_Пароль")
    wifi.sta.autoconnect(1)
    local mytimer = tmr.create()
    mytimer:register(15000, tmr.ALARM_SINGLE, function (t) print(wifi.sta.getip()); t:unregister() end)
    mytimer:start()
    end
    Выделить весь код и нажать кнопку "Block". Этот код загрузит данные о точке в модуль и через 15 секунд Вы должны увидеть IP адрес соединения.
    Только после этого все остальное.
    Об этом написано, но Вы пропустили.
     
  8. alexvtule

    alexvtule Нерд

    Сделал формат данных контроллера.
    Выполнил указанный выше код, ip адрес контроллер написал.
    После этого загрузил ds18b20.lua
    Затем загрузил init.lua вот с таким содержанием
    Код (Lua):

    ap = "login"
    appass = "parol"
    pin = 4 -- сюда вешаем датчики
    sleepdelay = 60
    killdelay = 30
    countsleep = 3

    function sendNarod(temperature)
        wifi.setmode(wifi.STATION)
        wifi.sta.config(ap , appass)
        wifi.sta.autoconnect(0)

        tmr.alarm(0, 1000, 1, function()
            if wifi.sta.status() == 5 and wifi.sta.getip() ~= nil then
                print("Got wi-fi!")
                tmr.stop(0)
                local dataN = "#00-11-22-33-44-55\n" -- ваш ключ!!!
                print("T = "..temperature)
                dataN =dataN.."#T01#"..temperature.."\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('\nRetrieved in '..((tmr.now()-t)/1000)..' milliseconds.')
                   print('Narodmon says '..payload)
                   conn:close()
                   disconnect()
                   end)
                 t = tmr.now()
                 conn:connect(8283,'narodmon.ru')
            end
        end)
    end


    function publish_data()
        print("work now!")
        local t = 85
        t = getTemp()
        print("Got "..t)
        if t ~= 85 then
            local oldt = rtcmem.read32(0)
            local count = rtcmem.read32(1)
            if (count + 1) < 1 then
                rtcmem.write32(1, 0)
            else
                rtcmem.write32(1, (count+1))
            end
            rtcmem.write32(1, (count+1))
            print("oldt "..oldt)
            local delta = t - oldt
            if delta < 0 then
                delta = delta * -1
            end
            print("Delta "..delta)
            print("count = "..count)
            if (delta > 8) or (count > countsleep) then
                rtcmem.write32(0, t)
                print("countsleep = "..count)
                rtcmem.write32(1, 0)
                if bit.isset(t, 15) then t = 1 - bit.bxor(t, 0xffff) end
                t = t * 625 / 10000
                print("t = "..t)
                print("Publish Data!")
                sendNarod(t)
            else
                print("Not changes. Go...")
                disconnect()
            end
        end
    end

    function getTemp()
        print("get t")
        local t = 85
        local ds18b20 = require('ds18b20')
        ds18b20.setup(pin)
        local addres={}
        addres=ds18b20.addrs()
        if addres[1] ~= nil then
            t = ds18b20.read(addres[1])
        end
        print("Got "..t)
        return t
    end

    function disconnect()
        tmr.alarm(3, 500, 0, function()
            print("Sleep Now!")
            node.dsleep(1000000*sleepdelay, 4)
        end)
    end
    tmr.alarm(5, 1000*killdelay, 0, function()
        print("Get Sleep By Timer")
        disconnect()
    end)

    publish_data()

    Результат не отличается от предыдущего
    Код (Text):
    > dofile("init.lua");
    work now!
    get t
    Got 85
    Got 85
    > Get Sleep By Timer
    Sleep Now!
    ;l
    После того как контроллер заснул никакие манипуляции на него не действуют, кроме как нажатие кнопки RESET на плате.
     
  9. ИгорьК

    ИгорьК Давно здесь

    1. Вообще то он должен выдать не 85 градусов - проверяйте соединения.
    2. Чтобы модуль просыпался его надо паять. Читали то как? По диагонали?
     
  10. alp69

    alp69 Гик

    И отключить в Esplorer опцию autodetect firmware.
     
  11. alexvtule

    alexvtule Нерд

    Конечно пины RST и D0 я соединил перемычкой.
    Датчик пробывал подключать на все возможные GPIO, что есть на плате.
    [​IMG]
    Потом еще подцепив датчик на контакт D1 - GPIO5 (такую распайку вроде нашел), менял значения pin в файле init.lua и загружал его в контроллер. Ну и каждый раз соответственно нажимал кнопку RESET на плате.
    После очередного изменения и загрузки файла init.lua (таймеры я поставил 15 секунд на засыпание и 15 секунд на загрузку) в логах ESPlorera увидел наконец то периодические просыпания и засыпания контроллера. Но температура все равно 85. Датчиков у меня 2 - ни от одного нет ответа...
    В итоге теперь контроллер просыпается, пишет вот это
    Код (C++):
    work now!
    get t
    Got 85
    Got 85
    Get Sleep By Timer
    Sleep Now!
    sd „lа<Њlдc|ЏГд›r“#Њc„ыgnџdogњвдc8Д‡lrd;lxуoаГ$#gг|„ЊЗЏrДc„ыgnз
    NodeMCU custom build by frightanic.com
       branch: master
       commit: b96e31477ca1e207aa1c0cdc334539b1f7d3a7f0
       SSL: false
       modules: bit,file,gpio,mqtt,net,node,ow,tmr,uart,wifi
    build    built on: 2017-04-02 12:59
    powered by Lua 5.1.4 on SDK 2.0.0(656edbf)
    work now!
    get t
    Got 85
    Got 85
    Get Sleep By Timer
     
    и засыпает
    Но загрузить новый файл, стереть старый, отформатировать память я не могу... команды SOFT_RESET тоже не проходят.
    Код (C++):

    Waiting answer from ESP - timeout reached. Command aborted.
     
    Я перепрошил контроллер той же прошивкой еще 2 раза (nodemcu_flasher написал удачно), но программа из памяти никуда не делась...
    Контроллер в логе ESPlorer каждые 30 секунд продолжает просыпаться, показывать 85 градусов и засыпать.
    На сайт народного мониторинга, как я понял, не пытается отправлять даже и этих показаний.
    Можно как-то все это сбросить? Существует какой-нибудь HARD RESET?
     
    Последнее редактирование: 3 апр 2017
  12. ИгорьК

    ИгорьК Давно здесь

    1. Давайте договоримся, я с модулем работаю давно и много. За это время никаких "странных фантомов" в его поведении не встречал.
    Если в коде есть инструкции перезагрузки - они есть, и при правильном соединении все просыпается.
    Не рассказывайте мне об "удивительных вещах".

    Все что выложено в этой теме - рабочее 100%, иначе уже такой вой поднялся.

    Перепрошейте модуль заново начальной прошивкой. И не называйте основной рабочий файл init.lua до тех пор, пока все не заработает.

    Используйте это: https://github.com/marcelstoer/nodemcu-pyflasher
    Установите галку "yes, wipes all data"

    Причины 4:
    - не правильно соединены ноги (перепутаны между собой)
    - не правильно указан pin в скрипте
    - нет резистора 4.7 ком между плюсом и датой
    - неисправен датчик (маловероятно)

    И в целом:
    Я уважаю творчество, но в этой теме я уже сталкивался со "свободным" отношением к тому, что я пишу. Товарищ делает что считает нужным, а потом задает мне вопросы, почему не работает. Это не правильно. На какой ноге У МЕНЯ висит датчик? На сколько датчиков рассчитан этот проект?

    У меня не очень хорошее чувство от Ваших вопросов...

    Начните с другого проекта - с обычной отправки температуры, добейтесь нормальных показаний датчиков, прежде чем переходить к этому.
     
    Последнее редактирование: 3 апр 2017
  13. Slaiterx

    Slaiterx Гик

    я еще проще способ нашол вот ссылка на редактор прошивки прошивку создал прошил и настраивай через веб морду https://wifi-iot.com/p/esp8266/
     
  14. Slaiterx

    Slaiterx Гик

    единственный минус некотрорые модули в прошивка платные но недорого 1 устройство 100рублей меня ненапрягает зато новичкам я думаю проще не придумать
     
  15. ИгорьК

    ИгорьК Давно здесь

    Есть много простых способов, не все, правда, полезны для ума :)
    Может, удалить тему и оставить только Ваш пост?
     
    Последнее редактирование: 7 апр 2017
  16. Slaiterx

    Slaiterx Гик

    Вашей работой увлечен повторил два ваших проекта не на что не претендую просто решил поделится тем что нашол
     
  17. Mppstrit

    Mppstrit Нуб

    Добрый день, сделал по инструкции вторую версию на есп-01, и у меня проблема: переводческих отправляет ложную температуру 0°. Из-за чего это может происходить.
     

    Вложения:

  18. ИгорьК

    ИгорьК Давно здесь

    От неисправности датчика, от отсутствия контактов, от свойств линии. От глюков Народного Мониторинга. От совпадения MAC-адреса вашего устройства с кем-то, если вы его не поменяли.

    Если вы находитесь в одной сети со своим устройством - наберите в адресной строке http://narodmon.ru/ip
    и посмотрите что там шлется на сервер. Увидите типа такого:
    upload_2018-2-5_9-52-48.png
     
  19. Mppstrit

    Mppstrit Нуб

    Устройство на даче, есть лог с сайта.
    Код (Text):
    GeoIP: Симферополь, респ.Крым, Россия, FREEBIT-NET, Sudak, Crimea, 91.225.155.120

    Полученные показания датчиков / Latest Sensors Readings, UTC+3, limit=25, find=
    2018-02-05 09:59:55  91.225.155.120  TCP
    #68-C6-3A-AC-95-88
    #T1#3.3125
    ##

    2018-02-05 09:49:55  91.225.155.120  TCP
    #68-C6-3A-AC-95-88
    #T1#0
    ##

    2018-02-05 09:39:55  91.225.155.120  TCP
    #68-C6-3A-AC-95-88
    #T1#2.5
    ##

    2018-02-05 09:29:55  91.225.155.120  TCP
    #68-C6-3A-AC-95-88
    #T1#2.3125
    ##

    2018-02-05 09:19:55  91.225.155.120  TCP
    #68-C6-3A-AC-95-88
    #T1#1.9375
    ##

    2018-02-05 09:09:55  91.225.155.120  TCP
    #68-C6-3A-AC-95-88
    #T1#1.75
    ##

    2018-02-05 08:59:55  91.225.155.120  TCP
    #68-C6-3A-AC-95-88
    #T1#1.5625
    ##

    2018-02-05 08:49:55  91.225.155.120  TCP
    #68-C6-3A-AC-95-88
    #T1#1.5
    ##

    2018-02-05 08:39:55  91.225.155.120  TCP
    #68-C6-3A-AC-95-88
    #T1#0
    ##

    2018-02-05 08:29:55  91.225.155.120  TCP
    #68-C6-3A-AC-95-88
    #T1#1.375
    ##

    2018-02-05 08:19:55  91.225.155.120  TCP
    #68-C6-3A-AC-95-88
    #T1#1.3125
    ##

    2018-02-05 08:09:55  91.225.155.120  TCP
    #68-C6-3A-AC-95-88
    #T1#1.3125
    ##

    2018-02-05 07:59:55  91.225.155.120  TCP
    #68-C6-3A-AC-95-88
    #T1#1.5
    ##

    2018-02-05 07:49:55  91.225.155.120  TCP
    #68-C6-3A-AC-95-88
    #T1#1.4375
    ##

    2018-02-05 07:39:55  91.225.155.120  TCP
    #68-C6-3A-AC-95-88
    #T1#0
    ##

    2018-02-05 07:29:55  91.225.155.120  TCP
    #68-C6-3A-AC-95-88
    #T1#0
    ##

    2018-02-05 07:19:55  91.225.155.120  TCP
    #68-C6-3A-AC-95-88
    #T1#1.5
    ##

    2018-02-05 07:09:55  91.225.155.120  TCP
    #68-C6-3A-AC-95-88
    #T1#0
    ##

    2018-02-05 06:59:55  91.225.155.120  TCP
    #68-C6-3A-AC-95-88
    #T1#1.5625
    ##

    2018-02-05 06:49:54  91.225.155.120  TCP
    #68-C6-3A-AC-95-88
    #T1#1.8125
    ##

    2018-02-05 06:39:55  91.225.155.120  TCP
    #68-C6-3A-AC-95-88
    #T1#1.8125
    ##

    2018-02-05 06:29:54  91.225.155.120  TCP
    #68-C6-3A-AC-95-88
    #T1#1.875
    ##

    2018-02-05 06:19:54  91.225.155.120  TCP
    #68-C6-3A-AC-95-88
    #T1#1.9375
    ##

    2018-02-05 06:09:54  91.225.155.120  TCP
    #68-C6-3A-AC-95-88
    #T1#2
    ##

    2018-02-05 05:09:54  91.225.155.120  TCP
    #68-C6-3A-AC-95-88
    #T1#2.375
    ##
     
    Может ли это быть из-за питания? Питаю тел. Зарядкой+ dc-dc понижающий до 3.3в.
     
  20. ИгорьК

    ИгорьК Давно здесь

    Не знаю что сказать. Не сталкивался с таким. Меняйте все подряд последовательно - это единственный вариант.