Метеостанция на arduino с выгрузкой статистики в IoT

Добрых суток!

Сегодня мы соберем метеостанцию с выгрузкой статистики в инет.

Для этого нам понадобятся:

- стабилизатор напряжения АМS1117-3.3 ($0.85/10шт);

- датчик температуры и влажности DHT11 ($0.80);

- датчик температуры и давления GY68 ($4);

- Arduino Pro Mini ($1.24);

- модуль Wi-Fi на ESP-8266 (ESP-01) ($1.9);

- сопротивления 4,7к и 10к;

- электролиты 100 и 1000 мФ на 10+В;

Итого: около $9 (225грн);

Все легко находится на алиэкспрессе, так что ссылок не будет.


Начнем мы с нашего WiFi модуля ESP-01:

Питание: 3.0 - 3.6 В;

Ток: 60-220 мА (в зависимости от режима 802.11 и настроек энергосбережения);

Для работы нужно подтянуть вывод CH_PD к питанию через резистор 10 кОм.

Метеостанция на arduino с выгрузкой статистики в IoT Arduino, DHT11, Gy68, Esp8266, Wi-Fi, Интернет вещей, Thingspeak, Длиннопост

Как подключить модуль, подробно написано здесь.

Конкретно про обновлении прошивки - здесь.


Я использовал прошивку с АТ-командами версии 0.25. Между версиями существуют небольшие различия, так что решайте сами, что вам проще: изменить код скетча или прошить модуль.

Распиновка такая:

ESP-01  >  Arduino

Tx > 10

Rx >  11

CH_PD > через 10 кОм на +3.3В

Vcc > +3.3

Gnd >  Gnd

Для проверки заливаем в ардуину скетч из примеров SoftwareSerial.ino, проверив чтобы строка

SoftwareSerial mySerial(10, 11); // RX, TX

соответствовала наши ногам ардуины. Напомню, что выводы данных подключаются крест-накрест, Rx->Tx и Tx->Rx

Теперь нам понадобится программа ESP8266 Config. Подключаемся к порту с модулем на скорости 115200. Если вместо картинки

Метеостанция на arduino с выгрузкой статистики в IoT Arduino, DHT11, Gy68, Esp8266, Wi-Fi, Интернет вещей, Thingspeak, Длиннопост
в порт идет мусор, отключаемся, меняем скорость на меньшую, подключаемся снова и ребутим модуль, до получения строк

Firmware builder: esp8266.ru

ready

Вводим в том же окне команду тестовую АТ. Нам должен придти ответ ОК. Если ответ приходит, читаем дальше, нет - отписываемся в комментах, помогу чем смогу.


Далее, нам нужно установить нужные нам скорость порта по-умолчанию и параметры сети.

1. Параметры порта, команда вида AT+UART_DEF=<baudrate>,<databits>,<stopbits>,<parity>,<flow control>. Параметры можно посмотреть в диспетчере устройств->свойства порта

Метеостанция на arduino с выгрузкой статистики в IoT Arduino, DHT11, Gy68, Esp8266, Wi-Fi, Интернет вещей, Thingspeak, Длиннопост

т.е. наша команда будет такой AT+UART_DEF=9600,8,1,0,0

вводим, получаем ОК, перегружаем модуль и переподключаемся со скоростью 9600.

2. В окне ESP8266 Config нажимаем List AP, получаем список всех доступных сетей. Выбираем нужную, вводим пароль, жмем Join AP. В консоли должно появиться

AT+CWJAP="SSID","PASSWD"

WIFI CONNECTED

WIFI GOT IP

OK

Для получения адреса у меня в роутере включен DHCP с раздачей IP по МАС.

Формат всех команд можно посмотреть в файле "ESP8266 AT Instruction Set_v0.25"

DHT11: Довольно хреновый датчик, иногда выдающий данные с сильным разбросом (лучше возьмите DHT22, он еще и от 3.3+В питается (об этом ниже) - я брал просто самый дешевый с измерением влажности).

Питание: 3.5 - 5.5 В;

Ток до 0.3 мА;


Диапазон измерений:

- влажность 20-95% (+-5%). Если влажность больше (96-100%), модуль все равно покажет 95%:

Метеостанция на arduino с выгрузкой статистики в IoT Arduino, DHT11, Gy68, Esp8266, Wi-Fi, Интернет вещей, Thingspeak, Длиннопост

- температура 0-50 гр. (+-2 гр.). По факту ниже +3-4 гр. не покажет даже при сильном морозе.

- время между считываниями показаний не меньше 10 сек (иначе будет выдавать практически рандом).


При длине провода больше 20 м или напряжении питания меньше 5 В нужен подтягивающий резистор в 4,7 кОм на сигнальную линию. Я решил поставить, на всякий случай.

GY69: датчик давления и температуры на основе чипа BMP-180.

Питание: 1.68 - 3.6 В;

Ток около 5 мкА (мало верится, но сам не мерял);

Диапазон измерений:

- давление: 300-1100 гПа (-500 - 9000 м над ур.моря);

- температура: -40 ... +85 гр. (при температуре меньше ноля падает точность);

- время замера 4,5 ... 25 мкс;

По даташиту нужно сигнальные линии (SDA/SCL) нужно подтянуть к питанию резисторами по 4,7 кОм, но я не заморачивался.


Питание я взял от старой ЮСБ-зарядки, 5В 250мА. Т.к. оказалось, что ESP-01 очень требователен к питанию (предыдущий отладочный вариант питался от аккума на 3.7 В и сгорел через неделю), то отталкиваться будем именно от него - понижать напряжение до 3.3 В. Однако это меньше, чем нужно DHT11, поэтому его придется запитать от 5В.

Для включения ESP-01 необходимо подать через резистор 10 кОм питание на ногу CH_PD. Однако из-за того, что у микрухи самого WiFi распаяны не все ноги (они "висят в воздухе"), она сильно греется даже в отсутствие передачи данных. Ну а т.к. передавать статистику мы будем раз в 10 минут, нам совершенно не нужно держать модуль постоянно включенным (и расходовать заряд аккума, если питание от него).

Поэтому CH_PD мы подключим к 13й ноге контроллера и для включения связи будем подавать на неё высокий уровень.

Схема подключения стабилизатора напряжения AMS1117-3.3 (ток до 1А) особой оригинальностью не отличается и взята из даташита.

Итого, имеем схему (да,я знаю про fritzing, но мне лень в ней разбираться):

Метеостанция на arduino с выгрузкой статистики в IoT Arduino, DHT11, Gy68, Esp8266, Wi-Fi, Интернет вещей, Thingspeak, Длиннопост

Для проверки схему нужно залить скетч test_sensors.ino (ссылка на архив в конце поста). В порт должны полететь данные о температуре/давлении/влажности.


Выгрузка статистики.

Регистрируемся на сайте thingspeak.com.

Создаем новый канал

Метеостанция на arduino с выгрузкой статистики в IoT Arduino, DHT11, Gy68, Esp8266, Wi-Fi, Интернет вещей, Thingspeak, Длиннопост

Тут выставляем по полю на каждый измеряемый параметр.

Кроме этого, можно настроить видимость канала (все/только вы), высоту нашей станции над уровнем моря, координаты и т.д. Создаем.

Далее идем в Channel Settings и переписываем Channel ID, идем в API keys и переписываем Write API Key. По двум этим параметрам мы будем писать данные.

Проверить работоспособность канала можно, перейдя в броузере по адресу 184.106.153.149/update?key=[ВАШ_Write_API_Key]&field1=0

Откроется страница с номером текущей порции данных (для первого раза 0, потом 1, и т.д.).

Открываем скетч WiFiMeteostationIoT.ino и исправляем строки:

14 String remote_key = "KEY";// passkey

на ваш Write API Key.

105 dps.init(MODE_STANDARD, N, true);

N замените на вашу текущую высоту (в МЕТРАХ, несмотря на то, что в даташите написано про сантиметры) - это нужно для точно определения давления. Узнать ее можно либо с помощью GPS, либо на  этой страничке.


Для отправки одной "порции" данных нужно отправить на модуль WiFi команды:

AT+CIPSTART=2,"TCP","184.106.153.149",80 //создать соединение №2, протокол ТСР, адрес, порт

AT+CIPSEND=2,N //через соединение №2 отправить пакет длинной в N байт

GET /update?key=[ВАШ_Write_API_Key]&field1=25 //сам пакет

AT+CIPCLOSE=2 //закрыть соединение

Обратите внимание на переносы строк \r\n в коде. Так надо.


Скетч в архиве.


Сам канал по мере заполнения примет такой вид:

Метеостанция на arduino с выгрузкой статистики в IoT Arduino, DHT11, Gy68, Esp8266, Wi-Fi, Интернет вещей, Thingspeak, Длиннопост

Схема потребляет около 80 мА при передаче данных и 15-20 мА при простое.


Что можно улучшить:

- заменить DHT-11 на что-нибудь получше, тот же DHT-22;

- сделать фильтрацию замеренных значений (по тому же Калману (пост) ).

- отсылать на статистику не сразу после включения, а через 10 минут, предварительно отфильтровав;

- подтянуть GPIO ESP-01 на питание через 10 кОм;

- подтягивать DHT-11 по-хорошему надо было не на +5, а на +3.3 В;

- не заставлять ардуину впустую гонять delay(), а сделать полноценный сон с "разбудкой" по таймеру;

- оба датчика потребляют намного меньше допустимой нагрузки на ногу ардуины (40 мА), можно запитать их через контроллер и включать только по надобности;


GoogleDrive c архивом


P.S. первый, и, скорее всего, крайний пост - не подписывайтесь ;)

Arduino & Pi

1.4K постов20.6K подписчик

Добавить пост

Правила сообщества

В нашем сообществе запрещается:

• Добавлять посты не относящиеся к тематике сообщества, либо не несущие какой-либо полезной нагрузки (флуд)

• Задавать очевидные вопросы в виде постов, не воспользовавшись перед этим поиском

• Выкладывать код прямо в посте - используйте для этого сервисы ideone.com, gist.github.com или схожие ресурсы (pastebin запрещен)

• Рассуждать на темы политики

• Нарушать установленные правила Пикабу

7
Автор поста оценил этот комментарий

А зачем тут Arduino? На Esp8266 вполне можно сделать то же самое. Она даже программируется в той же среде. Зачем два контроллера вместо одного?

раскрыть ветку
3
Автор поста оценил этот комментарий

Ничего не понял, но ты давай все обратно меняй, а то на улице минус 42.

раскрыть ветку
2
Автор поста оценил этот комментарий
выгрузкой статистики в IoT

Это как? IoT - это "интернет вещей", туда нельзя ничего "выгрузить".

раскрыть ветку
1
Автор поста оценил этот комментарий

гугл диск уехал.

кому все еще нужны исходники

http://dropmefiles.com/wEivr

http://files. ДП .ua/file?source=17122111564093014207

http://files.d-lan.  ДП .ua/download?file=43e5b655445220e94b2b60ae800d0c89

https://ru.files.fm/u/x5mzzehh

https://fex.net/get/089887455386/158745573

Если ссылки нерабочие, мои соболезнования.

раскрыть ветку
1
Автор поста оценил этот комментарий
Спасибо!