Сбор информации о температуре в теплице
- Войдите на сайт для отправки комментариев
Пнд, 04/01/2016 - 14:18
Добрый день!
Нужно помочь мне собрать такую схему. Может быть можно ее оптимизировать. Большинство комплектующих уже есть, вышлю список того, что заказал на алиэксрпесс. Но, скорее всгео, чего-нибудь не хватает, буду докупать там же или в Москве.
Схема будет использоваться в отапливаемой теплице. Задача - собирать данные о температуре из разных углов теплицы, температуру котла. Пока что только сбор информации.
Рассмотрю варианты удаленного сотрудничества.

такой вопрос = почему DHT11/22 почему не 18b20?
Если дело еще и во влажности то сразу скажу что тогда надо думать как датчик ставить, иначе на нено роса выпадет и влажность будет всегда 100%
Если только температура однозначно рекомендую 18b20, есть варианты с влагоизоляцией, в принципе сделано очень удобно.
18b20 тоже можно. Я новичок в ардуино, поэтому и пришел за советом. 18b20 тоже купил, уже есть в наличии.
Мне нужно рассказать, что нужно докупить, показать, как основные вещи подключить, запрограммировать. Потом периодически отвечать на вопросы.
А почему отправка по HTTP, лучше MQTT. Сейчас именно так и делаю, тем более он гораздо удобнее.
Из всего, что тебе нужно: DS18B20, nrf24l01+, sim800L, atmega168 , ну и LCD
Из всего, что тебе нужно: DS18B20, nrf24l01+, sim800L, atmega168 , ну и LCD
Спасибо за советы! Можешь помочь с реализацией? Я готов оплатить услуги.
пишите на yaryarikyar@ya.ru . помогу с реализацией)
Могу помочь просто так. Говори почту. Но только, если ты сам хочешь научиться, готов разбираться и т.д.!
alexisdenisov@gmail.com
skype - thedeadstone
spa-sam а куда данные от Arduino передаете? Кто сервер?
По mqtt sim800L передаёт на www.cloudmqtt.com с удалённой теплицы, т.к. находится на расстоянии 1.5км. А уже с www.cloudmqtt.com забираю на комп. В пределах 150 метров собираю с датчиков на nrf24l01+, где всё собирается на базовый приёмник и передаётся по com порту. Написал свою прогу на C#, где выводятся графики и показания датчиков, плюс сигнализация по привышению параметра и отсутствию 220В в сети на удалённой теплице. Этой же прогой передаются данные на "народный мониторинг" и Xively. Так же сейчас доделываю, что эта прога будет передавать показания с датчиков принятых по nrf24l01+ по протоколу MQTT на www.cloudmqtt.com. Это для того, чтобы можно было взять с собой прогу на флешке, запустить на любом компе и получать данные в любом месте.
spa-sam Спасибо. Понятно, не люблю я все эти облака. Получаешься привязан к сервису. Хотя их (облачных технологий) все больше вокруг.
Почитал немного о MQTT, в принципе интересно, хотя HTTP привычнее.
Согласен, привязан. Но можно в качестве резервирования отправлять данные на несколько сайтов или развернуть свой сервер. Хотел попробовать передатчики lora rfm98, заказал их и по своеё невнимательности сжёг их.
Добрый день.
Я бы сделал так
Купил планшет по акции(4000 руб), ардуино уно, датчики ДС1820.
На планшете копил данные о температуре и по запросу передавал непосредственно на свой компьютер без всяких облаков
Добрый день.
Я бы сделал так
Купил планшет по акции(4000 руб), ардуино уно, датчики ДС1820.
На планшете копил данные о температуре и по запросу передавал непосредственно на свой компьютер без всяких облаков
передавали бы каким образом? флешку бы вынимали-втыкали руками? 4000тр. против 400 за sim800L. Глупо.
Такое чувство что все ходят вокруг да около. Я уже давно предлагаю: Давайте построим систему на RS485. Если нужно данные с системы в комп то просто переходник FT232->485.
По mqtt sim800L передаёт на www.cloudmqtt.com с удалённой теплицы, т.к. находится на расстоянии 1.5км. А уже с www.cloudmqtt.com забираю на комп. В пределах 150 метров собираю с датчиков на nrf24l01+, где всё собирается на базовый приёмник и передаётся по com порту. Написал свою прогу на C#, где выводятся графики и показания датчиков, плюс сигнализация по привышению параметра и отсутствию 220В в сети на удалённой теплице. Этой же прогой передаются данные на "народный мониторинг" и Xively. Так же сейчас доделываю, что эта прога будет передавать показания с датчиков принятых по nrf24l01+ по протоколу MQTT на www.cloudmqtt.com. Это для того, чтобы можно было взять с собой прогу на флешке, запустить на любом компе и получать данные в любом месте.
День добрый.
Можете выложить скетч и библиотеку, для подключение микроконтроллера к www.cloudmqtt.com по GPRS c помощью SIM800l.
p.masyukov - sckype
если еще нужно - пишите..
Подскажите как cloudmqqt c SIM800l подружить?
Использую NodeMCU, по wi fi работает, хочу так же реализовать по GPRS
https://www.arduino.cc/en/Tutorial/GSMExamplesWebClient
spa-sam Спасибо. Понятно, не люблю я все эти облака. Получаешься привязан к сервису. Хотя их (облачных технологий) все больше вокруг.
Почитал немного о MQTT, в принципе интересно, хотя HTTP привычнее.
Да. Тоже посмотрел - костыль еще тот... Хотя без этого в последнее время не обойтись..
Использовал библиотеку от adafruit https://learn.adafruit.com/adafruit-io-basics-digital-output/arduino-cellular
По ссылке подробно расписано как привязать к брокеру на примере IoT от adafruit. Если будет затыка разобраться, то обращайтесь, помогу! По поводу костыля...да есть неудобство, но зато расстояние становится не критично. Я сначала использовал www.cloudmqtt.com , теперь решил сделать иначе - поставил на raspberry Pi mqtt брокер mosquito и пользуюсь своим брокером без ограничений. В планах помимо C# приложения на компе написать своё андроид приложение.
Ядрён батон, зачем так сложно?
1) ставим роутер(как роутер к инету плодключить сами думайте, и нужно ли), объединяем через изернет или wifi+изернет
2) экран зачем? есть же ПК (опять же с телефона можно зайти по wi-fi)
3)переключатель выбрасываем
4) вторую ардуино уно(а лучше - мегу) подключаем как и первую через изернет к роутеру.
получаем стройную систему.
А может у кого есть пример как с Arduino через Wi-Fi на ESP8266 отправлять/принимать данные (топик) на CloudMQTT?
А может у кого есть пример как с Arduino через Wi-Fi на ESP8266 отправлять/принимать данные (топик) на CloudMQTT?
В гугле ссылок на первой странице прям:
https://sonyarouje.com/2016/03/15/mqtt-communication-with-arduino-using-...
https://home-assistant.io/blog/2015/10/11/measure-temperature-with-esp82...
Ну и далее по тексту, по волшебному заклинанию "arduino esp mqtt" ;)
дубль.
Удалось на NodeMCU c помощью SIM800l по GPRS отправлять данные температуры и влажности по MQTT на broker.mqtt-dashboard.com.
Попробовал этот же скетч на atmega168 nano V3 пишет недостаточно памяти, программа может работать не корректно. и данные не отправляются.
Можете помочь подкорректировать мой скетч что бы он работал на atmega168 nano V3.
Вопрос задан в воздух :)
Использовал библиотеку от adafruit https://learn.adafruit.com/adafruit-io-basics-digital-output/arduino-cellular
По ссылке подробно расписано как привязать к брокеру на примере IoT от adafruit. Если будет затыка разобраться, то обращайтесь, помогу! По поводу костыля...да есть неудобство, но зато расстояние становится не критично. Я сначала использовал www.cloudmqtt.com , теперь решил сделать иначе - поставил на raspberry Pi mqtt брокер mosquito и пользуюсь своим брокером без ограничений. В планах помимо C# приложения на компе написать своё андроид приложение.
День добрый.
Удалось на NodeMCU c помощью SIM800l по GPRS отправлять данные температуры и влажности по MQTT на broker.mqtt-dashboard.com. (он без логина и пароля)
Попробовал этот же скетч на atmega168 nano V3 пишет недостаточно памяти, программа может работать не корректно. и данные не отправляются.
Можете помочь подкорректировать мой скетч что бы он работал на atmega168 nano V3. и коннектиться с логином и паролем к www.cloudmqtt.com
У Вас есть аська или какой-нибудь другой месенджер?
Использовал библиотеку от adafruit https://learn.adafruit.com/adafruit-io-basics-digital-output/arduino-cellular
По ссылке подробно расписано как привязать к брокеру на примере IoT от adafruit. Если будет затыка разобраться, то обращайтесь, помогу! По поводу костыля...да есть неудобство, но зато расстояние становится не критично. Я сначала использовал www.cloudmqtt.com , теперь решил сделать иначе - поставил на raspberry Pi mqtt брокер mosquito и пользуюсь своим брокером без ограничений. В планах помимо C# приложения на компе написать своё андроид приложение.
День добрый.
Удалось на NodeMCU c помощью SIM800l по GPRS отправлять данные температуры и влажности по MQTT на broker.mqtt-dashboard.com. (он без логина и пароля)
Попробовал этот же скетч на atmega168 nano V3 пишет недостаточно памяти, программа может работать не корректно. и данные не отправляются.
Можете помочь подкорректировать мой скетч что бы он работал на atmega168 nano V3. и коннектиться с логином и паролем к www.cloudmqtt.com
У Вас есть аська или какой-нибудь другой месенджер?
купи нано на 328
стоит всего 120 рублей
День добрый.
Удалось на NodeMCU c помощью SIM800l по GPRS отправлять данные температуры и влажности по MQTT на broker.mqtt-dashboard.com. (он без логина и пароля)
Попробовал этот же скетч на atmega168 nano V3 пишет недостаточно памяти, программа может работать не корректно. и данные не отправляются.
Можете помочь подкорректировать мой скетч что бы он работал на atmega168 nano V3. и коннектиться с логином и паролем к www.cloudmqtt.com
У Вас есть аська или какой-нибудь другой месенджер?
купи нано на 328
стоит всего 120 рублей
Купил, жду когда придет (надеюсь у него памяти хватит).
Осталось изменить библиотеку, что бы конектиться с логином и паролем.
было: //clientID, IP, Port, Topic, Message sendMQTTMessage("MYID", "broker.mqtt-dashboard.com", "1883", "mytopic", jsonStr); mqttMessageLength = 16 + strlen(clientId); mqtt_connect_message(mqttMessage, clientId); изменил на sendMQTTMessage("MYID", "m12.cloudmqtt.com", "14311", "login", "pass", "mytopic", jsonStr); mqttMessageLength = 16 + strlen(clientId)+ strlen(mqtt_user)+ strlen(mqtt_pass); mqtt_connect_message(clientId, mqtt_user, mqtt_pass); в библиотеке было: #ifndef MQTT_H_INCLUDED #define MQTT_H_INCLUDED #include <string.h> #include <stdint.h> void mqtt_connect_message(uint8_t *, char *); void mqtt_publish_message(uint8_t *, char *, char *); void mqtt_disconnect_message(uint8_t *); #endif // MQTT_H_INCLUDED изменил на: void mqtt_connect_message(char *, char *, char *); void mqtt_publish_message(uint8_t *, char *, char *); При компеляции выдает ошибку, стал смотреть файл ССP там: #include <mqtt.h> void mqtt_connect_message(uint8_t * mqtt_message, char * client_id) { uint8_t i = 0; uint8_t client_id_length = strlen(client_id); mqtt_message[0] = 16; // MQTT Message Type CONNECT mqtt_message[1] = 14 + client_id_length; // Remaining length of the messageВот тут я заступорился.
Как добавить в скет, коннектиться по логину и паролю?
Мне удалось заставить работать только один из 3 вариантов библиотек PubSubClient работать с CloudMQTT. Arduino Nano отправляет данные через ESP8266 по Wi-Fi на Cloud. Читаю данные Андроид приложением на смартфоне и со смартфона управляю Ардуиной через Cloud. Остался пока только не решенным вопрос - иногда зависает не то ESP не то глючит сервер Cloud. Причем сервер EU (м21.cloud) работает стабильнее чем м12 US. Возможно кривую прошивку загнал в ESP.
Делали управление уличным освещением . Автоматизированная система управления наружным освещением (АСУНО)
Отправка данных через модем SIM900 ( сейчас лучше взять SIM800) или по LAN
Можно в контроллере сразу сделать сервер на HTML5, тогда будет и графики рисовать.
Рабочий код, подставить только свои данные
#include <SoftwareSerial.h> #include "Adafruit_FONA.h" #include "Adafruit_MQTT.h" #include "Adafruit_MQTT_FONA.h" #include <Adafruit_SleepyDog.h> //******************используемые переменные******************************** char *val; /*************************** FONA Pins ***********************************/ #define FONA_RX 3 #define FONA_TX 4 #define FONA_RST 2 SoftwareSerial fonaSS = SoftwareSerial(FONA_TX, FONA_RX); Adafruit_FONA fona = Adafruit_FONA(FONA_RST); /************************* Setup *********************************/ #define AIO_SERVER "сервак" #define AIO_SERVERPORT 1883 #define AIO_USERNAME "ваше имя" #define AIO_KEY "пароль" const char MQTT_SERVER[] PROGMEM = AIO_SERVER; const char MQTT_USERNAME[] PROGMEM = AIO_USERNAME; const char MQTT_PASSWORD[] PROGMEM = AIO_KEY; Adafruit_MQTT_FONA mqtt(&fona, MQTT_SERVER, AIO_SERVERPORT, MQTT_USERNAME, MQTT_PASSWORD); /****************************** Feeds ***************************************/ // настройки MQTT на публикацию топика "/my" const char DATA_SND_FEED[] PROGMEM = AIO_USERNAME "/my"; Adafruit_MQTT_Publish snd_data = Adafruit_MQTT_Publish(&mqtt, DATA_SND_FEED); // настройки MQTT на подписку топика "/my" const char DATA_RCV_FEED[] PROGMEM =AIO_USERNAME "/my"; Adafruit_MQTT_Subscribe rcv_data = Adafruit_MQTT_Subscribe(&mqtt, DATA_RCV_FEED); /*************************** Sketch Code ************************************/ // сколько ошибок подключения нужно, чтобы перегрузить МК uint8_t txfailures = 0; #define MAXTXFAILURES 3 void setup() { Serial.begin(115200); fonaSS.begin(9600); fona.begin(fonaSS); Serial.println(F("Initializing SIM800L....(3 seconds)")); fonaSS.println("AT+CMEE=2"); Serial.println(F("FONA is OK")); //Включаем Watchdog на 8 секунд, если вдруг МК зависнит Watchdog.enable(8000); //переодически сбрасываем таймер Watchdog Watchdog.reset(); Serial.println(F("Checking for network...")); while (fona.getNetworkStatus() != 1) { delay(500); } Watchdog.reset(); delay(5000); //для стабилизации подключения Watchdog.reset(); fona.setGPRSNetworkSettings(F("internet")); //точка доступа для gprs, в данном случае это "internet" (мтс Украина) delay(1000); //для стабилизации подключения //проваеряем отключен ли gprs Serial.println(F("Disabling GPRS")); fona.enableGPRS(false); Watchdog.reset(); delay(5000); //для стабилизации подключения Watchdog.reset(); //подключаем gprs Serial.println(F("Enabling GPRS")); if (!fona.enableGPRS(true)) { Serial.println(F("Failed to turn GPRS on")); } else { Serial.println(F("Connected to Cellular!"));} Watchdog.reset(); delay(5000); // //для стабилизации подключения Watchdog.reset(); Watchdog.reset(); //подписываемся на топик mqtt.subscribe(&rcv_data); } void loop() { Watchdog.reset(); //подлючаемся по mqtt MQTT_connect(); Watchdog.reset(); //пример строки String str_1 = "ID" + String(44) + ";" + String("hello") + ";" + "base" + ";" + String("V_pwr") + ";"+ String("V_bat")+";" + String("--")+";" + String("--")+ ";" + String("mr_long")+ ";" + "com"; //переводим нашу строку в набор символов char str_Char_1[100]; str_1.toCharArray(str_Char_1, str_1.length()+1); // отправляем через mqtt строку if (!snd_data.publish(str_Char_1) ) {txfailures++; Watchdog.reset();} else {txfailures= 0;} //получаем подписку по MQTT и выводим в com порт, то что получили Adafruit_MQTT_Subscribe *subscription; while ((subscription = mqtt.readSubscription(5000))) { if (subscription == &rcv_data) { Serial.print(F("Got: ")); val = (char*)&rcv_data.lastread; //получаем нашу строку из MQTT и записываем в массив символов Serial.print(F("Received: ")); //выводим в com порт, что получили Serial.println(val);} }//закончили подписку //*********************************************************************************************** //в самом низу программы есть функция String getValue, которая парсит нашу строку ************** //парсим полученную через MQTT строку String val_1 = getValue(val,';',0 ); String val_2 = getValue(val, ';', 1); String val_3 = getValue(val, ';', 2); String val_4 = getValue(val, ';', 3); String val_5 = getValue(val, ';', 4); String val_6 = getValue(val, ';', 5); String val_7= getValue(val, ';', 6); String val_8 = getValue(val, ';', 7); String val_9 = getValue(val, ';', 8); //пингуем и держим связь с mqtt if(! mqtt.ping()) {Serial.println(F("MQTT Ping failed."));} } //********************************************************************************************************************* // Function to connect and reconnect to the MQTT server.*************************************************************** void MQTT_connect() { int8_t ret; // Stop if already connected. if (mqtt.connected()) { return;} Serial.print("Connecting to MQTT... "); while ((ret = mqtt.connect()) != 0) { // connect will return 0 for connected Serial.println(mqtt.connectErrorString(ret)); Serial.println("Retrying MQTT connection in 5 seconds..."); mqtt.disconnect(); delay(5000); // wait 5 seconds } Serial.println("MQTT Connected!"); } // Функция парсинга строки, которая вызывается в loop ****************************************************************** String getValue(String data, char separator, int index) { int found = 0; int strIndex[] = {0, -1 }; int maxIndex = data.length()-1; for(int i=0; i<=maxIndex && found<=index; i++){ if(data.charAt(i)==separator || i==maxIndex){ found++; strIndex[0] = strIndex[1]+1; strIndex[1] = (i == maxIndex) ? i+1 : i;} } return found>index ? data.substring(strIndex[0], strIndex[1]) : ""; }Здравствуйте, подскажите пожалуйста новичку. В этом коде логин и пароль вводятся из регистрации к MQTT ? Если да то где зарегистрироваться. Или это на компе устанавливается брокер и пробрасываются порты на роутере и уже от домашнего брокера логин и пароль?
https://www.cloudmqtt.com/
http://freebees.ru
Здравствуйте! Спасибо большое за код программы! Но помогите,пожалуйста! Использовала ваш код, подставила свои значения, в итоге все подключается. Но не могу разобраться как в приложении получить? регестрировалась на сайте cloudmqtt.com, приложение mqqt dashboard.
в сериал выходит:
в сериал выходит:
это было вчера! сегодня подключила заново,в программе ничего не меняла, подключается к gprs,пытается подключиться к mqtt, не получается один раз,второй и опять начинает подключать gprs. как так?
это было вчера! сегодня подключила заново,в программе ничего не меняла, подключается к gprs,пытается подключиться к mqtt, не получается один раз,второй и опять начинает подключать gprs. как так?
Это нормально для GRPS, сеть может работать нестабильно. Делаю проект на GRPS - то же самое - то с первого раза подключается. то с пятого, в иные дни вообще нет связи. Чтобы все работало более-менее автоматически - необходимо проверять в программе каждый "OK" в процедуре подключения к сети. И отслеживать таймаут - если за разумное время не подключились - сделать паузу, все отключить и начать с самого начала
Здравствуйте. попробовал код из поста #32
#include <SoftwareSerial.h> #include "Adafruit_FONA.h" #include "Adafruit_MQTT.h" #include "Adafruit_MQTT_FONA.h" #include <Adafruit_SleepyDog.h> //******************используемые переменные******************************** char *val; /*************************** FONA Pins ***********************************/ #define FONA_RST 2 SoftwareSerial fonaSS = SoftwareSerial(6, 7); Adafruit_FONA fona = Adafruit_FONA(FONA_RST); /************************* Setup *********************************/ #define MQTT_SERVER "m14.cloudmqtt.com" #define MQTT_SERVERPORT 17665 #define MQTT_USERNAME "*******" #define MQTT_PASSWORD "********" Adafruit_MQTT_FONA mqtt(&fona, MQTT_SERVER, MQTT_SERVERPORT, MQTT_USERNAME, MQTT_PASSWORD); /****************************** Feeds ***************************************/ // настройки MQTT на публикацию топика "/my" const char DATA_SND_FEED[] PROGMEM = MQTT_USERNAME "/my"; Adafruit_MQTT_Publish snd_data = Adafruit_MQTT_Publish(&mqtt, DATA_SND_FEED); // настройки MQTT на подписку топика "/my" const char DATA_RCV_FEED[] PROGMEM = MQTT_USERNAME "/my"; Adafruit_MQTT_Subscribe rcv_data = Adafruit_MQTT_Subscribe(&mqtt, DATA_RCV_FEED); /*************************** Sketch Code ************************************/ // сколько ошибок подключения нужно, чтобы перегрузить МК uint8_t txfailures = 0; #define MAXTXFAILURES 3 void setup() { Serial.begin(115200); fonaSS.begin(9600); fona.begin(fonaSS); Serial.println(F("Initializing SIM800L....(3 seconds)")); fonaSS.println("AT+CMEE=2"); Serial.println(F("FONA is OK")); //Включаем Watchdog на 8 секунд, если вдруг МК зависнит Watchdog.enable(8000); //переодически сбрасываем таймер Watchdog Watchdog.reset(); Serial.println(F("Checking for network...")); while (fona.getNetworkStatus() != 1) { delay(500); } Watchdog.reset(); delay(5000); //для стабилизации подключения Watchdog.reset(); fona.setGPRSNetworkSettings(F("internet.tele2.ru")); //точка доступа для gprs, в данном случае это "internet" (мтс Украина) delay(1000); //для стабилизации подключения //проваеряем отключен ли gprs Serial.println(F("Disabling GPRS")); fona.enableGPRS(false); Watchdog.reset(); delay(5000); //для стабилизации подключения Watchdog.reset(); //подключаем gprs Serial.println(F("Enabling GPRS")); if (!fona.enableGPRS(true)) { Serial.println(F("Failed to turn GPRS on")); } else { Serial.println(F("Connected to Cellular!"));} Watchdog.reset(); delay(5000); // //для стабилизации подключения Watchdog.reset(); Watchdog.reset(); //подписываемся на топик mqtt.subscribe(&rcv_data); } void loop() { Watchdog.reset(); //подлючаемся по mqtt MQTT_connect(); Watchdog.reset(); //пример строки String str_1 = "ID" + String(44) + ";" + String("hello") + ";" + "base" + ";" + String("V_pwr") + ";"+ String("V_bat")+";" + String("--")+";" + String("--")+ ";" + String("mr_long")+ ";" + "com"; //переводим нашу строку в набор символов char str_Char_1[100]; str_1.toCharArray(str_Char_1, str_1.length()+1); // отправляем через mqtt строку if (!snd_data.publish(str_Char_1) ) {txfailures++; Watchdog.reset();} else {txfailures= 0;} //получаем подписку по MQTT и выводим в com порт, то что получили Adafruit_MQTT_Subscribe *subscription; while ((subscription = mqtt.readSubscription(5000))) { if (subscription == &rcv_data) { Serial.print(F("Got: ")); val = (char*)&rcv_data.lastread; //получаем нашу строку из MQTT и записываем в массив символов Serial.print(F("Received: ")); //выводим в com порт, что получили Serial.println(val);} }//закончили подписку //*********************************************************************************************** //в самом низу программы есть функция String getValue, которая парсит нашу строку ************** //парсим полученную через MQTT строку String val_1 = getValue(val,';',0 ); String val_2 = getValue(val, ';', 1); String val_3 = getValue(val, ';', 2); String val_4 = getValue(val, ';', 3); String val_5 = getValue(val, ';', 4); String val_6 = getValue(val, ';', 5); String val_7= getValue(val, ';', 6); String val_8 = getValue(val, ';', 7); String val_9 = getValue(val, ';', 8); //пингуем и держим связь с mqtt if(! mqtt.ping()) {Serial.println(F("MQTT Ping failed."));} } //********************************************************************************************************************* // Function to connect and reconnect to the MQTT server.*************************************************************** void MQTT_connect() { int8_t ret; // Stop if already connected. if (mqtt.connected()) { return;} Serial.print("Connecting to MQTT... "); while ((ret = mqtt.connect()) != 0) { // connect will return 0 for connected Serial.println(mqtt.connectErrorString(ret)); Serial.println("Retrying MQTT connection in 5 seconds..."); mqtt.disconnect(); delay(5000); // wait 5 seconds } Serial.println("MQTT Connected!"); } // Функция парсинга строки, которая вызывается в loop ****************************************************************** String getValue(String data, char separator, int index) { int found = 0; int strIndex[] = {0, -1 }; int maxIndex = data.length()-1; for(int i=0; i<=maxIndex && found<=index; i++){ if(data.charAt(i)==separator || i==maxIndex){ found++; strIndex[0] = strIndex[1]+1; strIndex[1] = (i == maxIndex) ? i+1 : i;} } return found>index ? data.substring(strIndex[0], strIndex[1]) : ""; }вроде все подключается, но ардуинка зависает, вот лог запуска:
Загрузил код из примера Adafruit MQTT/MQTT_FONA:
вот лог:
вроде работает, не виснет, но данные на cloudmqtt не приходят.
кучу всего перепробовал, никак не могу отправить...
По mqtt sim800L передаёт на www.cloudmqtt.com с удалённой теплицы, т.к. находится на расстоянии 1.5км. А уже с www.cloudmqtt.com забираю на комп. В пределах 150 метров собираю с датчиков на nrf24l01+, где всё собирается на базовый приёмник и передаётся по com порту. Написал свою прогу на C#, где выводятся графики и показания датчиков, плюс сигнализация по привышению параметра и отсутствию 220В в сети на удалённой теплице. Этой же прогой передаются данные на "народный мониторинг" и Xively. Так же сейчас доделываю, что эта прога будет передавать показания с датчиков принятых по nrf24l01+ по протоколу MQTT на www.cloudmqtt.com. Это для того, чтобы можно было взять с собой прогу на флешке, запустить на любом компе и получать данные в любом месте.
Мое мнение:
Зачем возиться с проводами и какими то левыми сервисами? Раз уж имеется своя теплица, мне кажется проще поставить какой-то дешевый сервер, поставить Ubuntu, Установить Web сервер, Mosquitto.
Далее тянем в теплицу кабель с сетью, делаем глобальную сеть + WiFI роутер, далее покупаем ESP8266 цепляем на них все свои датчики, отправляем на свой сервер в локальной сети эти данные, если есть знания, пишем на PHP скриптик для мониторинга и отображения этих данных. Если нужнен удалееный монторинг, пробрасываем порт, берем статический IP у провайдера или на крайний случай, пользуемся бесплатным DDNS от NOIP. - Профит! В конце концов если у тебя пропадает интернет, данные никуда не пропадают, а хранятся на твоем сервере в локальной сети, но это опять же моё мнение:)
послушайте, Вадусик!
очень бы вам советовал смотреть, кому, что и зачем вы отвечаете. А так же на даты постов.
Вы уже во второй ветке выглядите клоуном со своими своевременными замечаниями...
Все зависит от конкретных условий. Есть теплицы, где стоят возле дома, а есть где на отдалённых учасках и там нет интернета, поэтому гже можно по wifi, а где нет, то там gsm. Плюс иногда перебои с элекричеством и т.д. Провода в теплицу лишний гемор, батареек на датчиках хватает на год минимум (данные раз в минуту передают), к тому же беспроводной датчик можно перенести куда угодно без лишних заморочек. А так, уже давно всё переделал. Сделал свои платы базовых ретрансляторов на esp32+ sim800c + rfm69hw(универсальность + с помощью wifi manager можно поменять настройки без перепрошивки), есть вариант с LORA. Завязано по mqtt на самый простой виртуальный сервер от провайдера (надежность больше чем дома, но домашний вариант тоже реализован на Debian). На сервере mosquitto, node-red, BD, grafana. Данные можно смотреть как на приложении на телефоне, тк и на сайте, на приложении на компе. Перешел с nrf24 на rfm69 (дальность стала до 500 метров в прямой видимости на обычную проволчную антенну).
Бибилиотека для sim800 от adafruit ведет себя иногда "неадекватно", иногда приходится добавлять костыли и вносить незначительные изменения, проблемы от версии к версии разного рода. Поэтому стал использовать tinygsm https://github.com/vshymanskyy/TinyGSM, там же неплохой пример по mqtt: https://github.com/vshymanskyy/TinyGSM/blob/master/examples/MqttClient/M...