ESP8266. Пишем данные в облако.

 

20150321043131

Переходим от простых экспериментов к освоению сетевых возможностей ESP8266. Задача будет стоять следующим образом: хочу видеть когда включался, когда выключался мой домашний ПК. Или любой другой девайс, у которого на борту есть порт USB (спутниковый ресивер, Sony PS, телевизор). Устройство будет состоять из нашего WiFi модуля и любого USB-переходника, имеющего выход 3,3 вольта для питания.

Принцип работы прост — включен контроллируемый прибор, -питание на модуль подано, и наше устройство шлет в облако «1», выключен — ничего не шлет. При этом, конечно, необходимо чтобы ваш WiFi роутер был включен и соединен с провайдером интернет.

Для начала зарегистрируемся на облачном сервисе. Я выбрал для сохранения данных сайт с красивым названием thingspeak.com. Регистрация предельно проста, однако не забудьте правильно установить тайм-зону, иначе все показатели будут сдвинуты. На сервисе необходимо получить свой уникальный код канала, по которому будет проходить идентификация.

Как написать скрипт я уже писал в предыдущей статье. Теперь создадим уже известные нам файлы init.lua и temp.lua

init.lua

— сообщаем модулю, что он будет терминальной станцией

— соединяемся с вашим WiFi роутером, и передаем управление в temp.lua

wifi.setmode(wifi.STATION)

wifi.sta.config(«SSID»,»password»)

wifi.sta.autoconnect(1)

dofile(‘temp.lua’)

В поля SSID и password подставляем соответственно имя вашей WiFi сети и пароль для подключения к ней.

4

temp.lua

— ставим таймер на 10 сек
tmr.alarm(0, 10000, 1, function() Sending() end )

function Sending()
определяем значение, которое будем слать в облако
onof=1
соединяемся с облаком  thingspeak.com (протокол TCP, 0 — означает  
некодированный)
conn=net.createConnection(net.TCP, 0)
conn:on(«receive», function(conn, s) print(s) end)
Порт 80 IP адрес thingspeak.com 184.106.153.149
conn:connect(80,’184.106.153.149′)
шлем единицу
conn:send(«GET /update?key=ВАШ КОД=»..onof..» HTTP/1.1\r\n»)
conn:send(«Host: api.thingspeak.com\r\n»)
conn:send(«Accept: */*\r\n»)
conn:send(«User-Agent: Mozilla/4.0 (compatible; esp8266 Lua; Windows NT 5.1)\r\n»)
conn:send(«\r\n»)
закрываем соединение
conn:on(«sent»,function(conn) conn:close() end)
conn:on(«disconnection», function(conn) end)
end

 

Поздравляю, вы только что собрали свое первое устройство Интернета вещей! Заходим под своим логином и паролем на thingspeak.com и наслаждаемся созерцанием графика. Точки означают поступление данных(устройство включено), прямая — их отсутствие.

6

Аналогично на сайте можно завести несколько каналов и собирать данные с нескольких устройств.

На этом пока все. Следите за следующими экспериментами…

Посмотрите так же...
19 комментариев
  1. admin:

    Коллеги, спасибо за интерес к моим статьям. Т.к. я получил несколько писем с одинаковым вопросом — отвечу здесь. В листинге перед комментариями стоят длинные тире, на самом деле в коде для модуля должны стоять два коротких «- -» см рисунок. Это особенности некоторых браузеров сливать 2 тире в одно длинное.

  2. Elektron:

    Супер! Спасибо за статью! Ждем новых экспериментов.

  3. Stasenko_A:

    А можно рассмотреть пример логирования на собственном сайте или у хостера?

  4. KrisRa:

    Присоединяюсь. Есть хостинг. Можно ли это реализовать силами php? немного программировал на этом языке

  5. admin:

    Ну а что мешает? NodeMCU отправляет из ESP8266 обычный http запрос. Вставляем данные, а средствами php его извлекаем и используем уже на хостинге по усмотрению. Можно так же поднять на ESP8266 web сервер, а с хостинг-сервера по cron забирать данные…

  6. vvr:

    Можно ли на один канал выводить данные с нескольких ESP?

  7. admin:

    А для каких целей выводить данные на один график? Скорее всего нет, так как устройство никак себя не идентифицирует по отношению к каналу. И отправка данных с нескольких устройств будет воспринята каналом как с одного.

  8. Gogi:

    Здравствуйте!
    Понравились ваши статьи о ESP8266. Есть несколько вопросов. Можно тут спросить? Получу ли на них ответы?
    Спасибо!

  9. admin:

    Конечно, постараемся помочь. Хотя про ESP8266 в интернете и так достаточно информации.

    • Gogi:

      Спасибо!
      Вопрос такой. Есть Артуинка, есть ESP8266. Можно ли сделать так, что бы я смог заливать скетч, на Артуинку+ESP8266 с компа через домашнюю WiFi сеть? А так же получать информацию на комп с артуинки, словно она подключена по USB?
      Простите за идиотский вопрос.

  10. admin:

    Теоретически возможно, если соединить RX-TX Arduino и ESP8266, и в модуль зашить скетч транслирующий команды из сети в сом-порт. Можно это реализовать через NodeMCU.
    Но только к чему такие извращения?

    • Gogi:

      Почему извращение?!
      Есть у меня ардуинка+ESP8266. На ардуние прицеплено несколько устройств. Все расположено удаленно. И время от времени, мне надо управлять удаленно (а точнее изменять некоторые настройки). Соответственно с USB шнурком и ноутом — не наездишься к девайсу. Вот и задал такой вопрос — а как сделать так, что бы и не ездить. есть готовые примеры? Что-то на просторах интернета не нашел:(.

  11. Всеволод:

    Помогите! отредактировал ваш скрипт под свои нужды но в грузив его, ESP престала загружаться. Как можно удалить *.LUA Если дело дальше Этого не идет »
    ts Jan 8 2013,rst cause:2, boot mode:(3,0)

    load 0x40100000, len 28740, room 16
    tail 4
    chksum 0xcd
    load 0x3ffe8000, len 2888, room 4
    tail 4
    chksum 0xbc
    load 0x3ffe8b50, len 15252, room 4
    tail 0
    chksum 0x4f
    csum 0x4f
    Rb‰дPHfxP Ih‰шЪ
    » перепрошивка не помогла 🙁

  12. admin:

    Если речь идет о NodeMCU, то попробуйте команду форматирования файловой системы — file.format()

  13. Антон:

    Добрый день. Очень благодарен вам за ваши статьи о NodeMCU.
    Но программа из этой статьи не заработала сразу. Вот мои грабли……
    GET запрос -> «GET /update?key=ВАШ КОД=»..onof..» HTTP/1.1\r\n»
    Я заменил на -> «GET /update?key=ВАШ КОД&field1=»..onof..» HTTP/1.1\r\n»
    до замены график ни как не хотел обновляться.

  14. admin:

    Возможно у вас несколько графиков на одном аккаунте. Это вполне возможно.

  15. Дмитрий:

    Огромное спасибо Автору!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *