Разрожусь еще одной темой. В принципе она является продолжением
этой, но учитывая другое железо и задачи выделю в отдельную.
Благодаря
kido у меня изменилось представление о правильном интерфейсе Ардуино, за что ему громадное спасибо.
В общем полез я в интернеты искать Wi-Fi модуль для своей меги и вижу, что на рынке из дешевых только различные вариации ESP8266. Но стал изучать как их подключать и программировать - голова закипела, большинство советуют прошивку NodeMCU программирование на языке Lua, чего мне крайне не хотелось - знакомиться с новым языком и средой программирования ради отправки пары строчек на сервер.
И набрел на вот
такую штуку, брал там же. В принципе это то же самый ESP8266, но уже распаянный, с программатором на борту (340-й), microUSB-входом, стабилизатором питания и практически за ту же цену, программировать можно а Arduino IDE.
Что имеем:
1. частота 80 или 160 MHz, в отличие от Меги, где только 16.
2. Память 4 Mb, у меги 256кб
3. Оперативка 80кб, у меги 4.
4. И самое главное вайфай, которого у меги нету.
5. Единственный минус - меньше выводов, но на крайний случай можно их увеличить, к примеру
такВ общем имеем на порядок (в прямом смысле - в 10 раз) более мощное устройство, но в разы дешевле и компактнее. Ресурсов хватает уже для запуска почти полноценного сервера, типа
такого.
Все это счастье всего за 4 у.е., т.е. в 2.5 раза дешевле Меги.
Для понимания - по сути это не просто WiFi модуль, а полностью отдельная Ардуина, которая может выполнять свои задачи, и лишь помогать моей Меге передавать данные на сервер.
Подключается
довольно просто, чем меня разочаровала
Я выделил целый вечер для борьбы с ней, а она с полпинка практически с первого идущего в комплекте с библиотекой примера, немного подкорректированного под свои нужды, стартанула. Нерастраченую энергию пришлось потратить на переукладку и перепаивание проводов вокруг Меги, там у меня уже добротный бардак образовался.
Вот скетч отправки данных на сервер:
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
ESP8266WiFiMulti WiFiMulti;
const uint16_t port = 80;
const char * host = "anndrew.tk";
void setup() {WiFiMulti.addAP("SSID", "password");} //название сети и пароль вайфая
void loop() {
WiFiClient client;
client_status = client.connect(host, port);
String url = //здесь формируем строку с GET-запросом
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"User-Agent: ESP8266\r\n" +
"Connection: close\r\n\r\n");
client.stop();}
Вот и все премудрости. Конечно, следует добавить таймер.
Программирование его идентично обычной Ардуине,
здесь подробно изложено, лично я столкнулся с одной проблемой: старая добрая конкатенация строк с помощью плюсов, типа x="Hello " + "world"; почему-то дает ошибку. Приходится делать либо x.concat() либо постепенно наращивать x+= "world";.
И некорректно отображается количество флеш-памяти, об этом разработчики знают и предупреждают.
Пока передаю на сервер только информацию, а управляю с телефона по Блютузу.
Можно управлять и интернету, но тут есть нюансы, есть два пути:
1. При отправке данных на сервер возвращать Ардуине команды. Просто, но команда поступит не сразу, а только когда Ардуина подключится к серверу.
2. Делать свой сервер на Ардуине, но намного сложнее и нужен статический IP.
Пока сделал отображение основной информации, остальное позже, дополнительно отпишусь.
Вот
приборная панель моего коллайдера, по состоянию на текущий момент. Извиняйте за внешний вид, дизайнер из меня никакой. По нажатии на графики открываются большие, более подробные. Шкалы автоматически подстраиваются под минимальное и максимальное значения. Пока в тестовом режиме, позже будут суточные.
Использовал библиотеку
Highcharts, до это пробовал еще
библиотеку от Гугла, но там настолько идиотская документация (основные настройки разбросаны по разным разделам, нужно потратить кучу времени, что до кучи все собрать), что сразу ее отбросил, а по большому счету они практически одинаковы.
Единственная проблема, с которой столкнулся - периодически появляются левые данные. Ну допустим, ожидается температура 23 градуса, а на сервер попадает 6645, не часто, примерно раз в 100 раз, на разных датчиках, досконально не разбирался, но грешу на преобразователь логических уровней (Wemos логика работает на 3.3В, а Мега на 5В, поэтому, чтоб не спалить первый, сигнал от Меги идет через этот преобразователь, обратно без него, Мега и 3.3В прекрасно понимает). Сначала думал, что питание (Wemos в пике может до 300 мА жрать), кинул конденсатор 3300 мF на шину питания, не помогло, зато датчики точнее стали работать
В общем не стал разбираться, а сделал медианный фильтр на Wemose (собираю 20 замеров в массив, сортирую по возрастанию, отсекаю 6 меньших и 6 больших, а из оставшихся беру среднее арифметическое). И глюки пропали и показания более стабильны стали.
С Мегой соединял по Serial.
На сервере данные заношу и беру для построения графиков из MySQL.
Вроде все рассказал.