Hi Addi, first of all thanks for sharing i am starting with this awesome
world and your work is really something to start at.
I am getting this error when verifying the code with arduino ide. What´s
wrong? Might be a syntax issue with the new ide?
Thanks in advance
Javier
Arduino:1.6.9 (Windows 7), Tarjeta:»Generic ESP8266 Module, 80 MHz, 40MHz,
DIO, 115200, 512K (64K SPIFFS), ck, Disabled, None»
ESP8266_mqtt_relay_ADITYA:14: error: ‘MQTT’ does not name a type
void callback(const MQTT::Publish& pub) {
ESP8266_mqtt_relay_ADITYA:14: error: expected unqualified-id before ‘&’
token
void callback(const MQTT::Publish& pub) {
ESP8266_mqtt_relay_ADITYA:14: error: expected ‘)’ before ‘&’ token
ESP8266_mqtt_relay_ADITYA:14: error: expected initializer before ‘pub’
void callback(const MQTT::Publish& pub) {
ESP8266_mqtt_relay_ADITYA:14: error: ‘MQTT’ does not name a type
void callback(const MQTT::Publish& pub) {
ESP8266_mqtt_relay_ADITYA:14: error: expected unqualified-id before ‘&’
token
void callback(const MQTT::Publish& pub) {
ESP8266_mqtt_relay_ADITYA:14: error: expected ‘)’ before ‘&’ token
ESP8266_mqtt_relay_ADITYA:14: error: expected initializer before ‘pub’
void callback(const MQTT::Publish& pub) {
exit status 1
‘MQTT’ does not name a type
Este reporte podría tener más información con
«Mostrar salida detallada durante la compilación»
opción habilitada en Archivo -> Preferencias.
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
#1, or mute the thread
https://github.com/notifications/unsubscribe/AAtdagRaj50KL_jBHjxZxHniCVsVWj7Hks5qSnHcgaJpZM4JFNhf
.
Loading
-
#1
Пытаюсь работать с библиотекой PubSubClient, модуль ESP8266 Wemos D1.
Получаю данные от Ардуино по UART.
С интервалом 5 сек посылаю на MQTT broker Mosquitto порядка 10 метрик, используя для этого функцию client.publish(topic, value).
Столкнулся со странной особенностью, а именно если предварительно подписаться на отсылаемую тему методом client.subscribe(topic), то публикация значений в эту тему (отработка метода client.publish) происходит за в среднем 3 миллисекунды, хотя бывают и задержки. Если же не подписываться, то метод отрабатывает за 200!!! миллисекунд. Это из-за чего так? Можно ли как-нибудь ускорить работу метода публикации?
Последнее редактирование: 29 Сен 2016
-
#2
@max506 могу только предположить, что подписка устанавливает и держит соединение с сервером. Без подписки соединение переустанавливается каждую публикацию — вот и тратится время на это. Код не смотрел, могу ошибаться.
-
#3
Вот код, которым я пользуюсь
Код:
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
const char *ssid = "......"; // Имя вайфай точки доступа
const char *pass = "......"; // Пароль от точки доступа
const char *mqtt_server = "......"; // Имя сервера MQTT
const int mqtt_port = 1883; // Порт для подключения к серверу MQTT
const char *mqtt_user = "";
const char *mqtt_pass = "";
String subscr_topic = "/esp/topic1/";
String prefix = "/esp/";
String buf_recv;
WiFiClient wclient;
PubSubClient client(wclient, mqtt_server, mqtt_port);
// Функция получения данных от MQTT брокера
void callback_subscr(const MQTT::Publish &pub)
{
String topic = pub.topic();
String value = pub.payload_string();
if( topic.substring(0,subscr_topic.length()) == subscr_topic) // передаем в UART только данные, на которые подписывались
Serial.println(topic.substring(subscr_topic.length())+"="+value);
}
// Отправка данных на MQTT брокер
void Send(){
char ch;
String pub_topic;
String val;
int pos_delim;
long t;
// полчение данных по UART от Arduino
while (Serial.available()) {
ch = (char)Serial.read();
if (ch == 'r') continue;
if (ch == 'n') {
// Данные приходят в виде строк в формате <тема>=<значение>
pos_delim = buf_recv.indexOf('=');
pub_topic = buf_recv.substring(0,pos_delim);
val = buf_recv.substring(pos_delim+1);
// #### Вызов метода публикации "виснет" на 200 миллисекунд, если предварительно не подписаться на публикуемую тему !!!!!
t=millis();
client.publish(prefix+pub_topic,val);
Serial.println(millis()-t);
buf_recv="";
break;
}
buf_recv += ch;
}
}
void setup() {
Serial.begin(9600);
}
void loop() {
// подключаемся к wi-fi
if (WiFi.status() != WL_CONNECTED) {
Serial.print("Connecting to ");
Serial.print(ssid);
Serial.println("...");
WiFi.begin(ssid, pass);
if (WiFi.waitForConnectResult() != WL_CONNECTED)
return;
Serial.println("WiFi connected");
}
// подключаемся к MQTT серверу
if (WiFi.status() == WL_CONNECTED) {
if (!client.connected()) {
Serial.println("Connecting to MQTT server");
if ( client.connect(MQTT::Connect("ESP_Witty").set_auth(mqtt_user, mqtt_pass)) ) {
Serial.println("Connected to MQTT server");
client.set_callback(callback_subscr);
client.subscribe(subscr_topic+"#"); // подписывааемся на темы с изменяемыми данными
} else {
Serial.println("Could not connect to MQTT server");
}
}
if (client.connected()){
client.loop();
Send();
}
}
}
-
#4
могу только предположить, что подписка устанавливает и держит соединение с сервером. Без подписки соединение переустанавливается каждую публикацию — вот и тратится время на это.
А может кто-нибудь код глянуть, я не очень понимаю в библиотеках классов.
Может есть возможность не подписываться на все темы и при этом публиковать сообщения, на которые не подписан, с нормальной скоростью.
-
#5
А может кто-нибудь код глянуть, я не очень понимаю в библиотеках классов.
Может есть возможность не подписываться на все темы и при этом публиковать сообщения, на которые не подписан, с нормальной скоростью.
Смотрю вы пользуетесь той же библиотекой pubsubclient, что и я. Этих библиотек есть 2 вида, та что мы с вами используем самая редкая, и есть др. которой все пользуются, она доступна в репазитории arduino ide методы ее использования в скетче различаются с нашей. Наша построена на объекте класса String — все текстовые строки, а та что самая популярная на строках char*.
Мною были замечены баги и в той и в той библиотеке, в нашей с вами — если в один из топиков на каторый мы подписаны быстро засыпать данные, например нажимая быстро одну и туже кнопку в приложении или дергать слайдер в приложении с которого не преривно сыпятся данные, то esp8266 виснет намертво и даже не ребутит. В др. библиотеке что есть в IDE если взять даже стандартный пример mqqt_pablish_in_callback и дописать в его с дисяток подписок, то модуль esp начинает уже виснуть на 5 подписке где-то, а далее ребутит.
-
#6
Попробуйте использовать версию менеджера плат esp8266 не последнюю, а 2.0.0. С ней намного устойчивее работает.
-
#7
Попробуйте использовать версию менеджера плат esp8266 не последнюю, а 2.0.0. С ней намного устойчивее работает.
Да я последнюю (2.2.3) и не использую. Я использую 2.2.0
-
#8
Да я последнюю (2.2.3) и не использую. Я использую 2.2.0
Попробуй перейти на 2.0.0
-
#9
Попробуй перейти на 2.0.0
Ок. Папробую.
Реально это практически полностью помогло, решить проблему с зависанием если быстро засыпать данными в топик. Сейчас как бы тоже видно будто бы подвисает, но не намертво спустя пару секунд само атдупляется.
Последнее редактирование: 26 Дек 2016
-
#10
можно ли как-нибудь ускорить работу метода публикации?
Ура, ура, меня осинило Наконец то понял в чем были все проблеммы с зависанием, они были как раз в этом что вы описали. На отправку одного исходящего сообщения действительно уходит много времени и если нужно подрят отправить до 10 или более исходящих сообщений то цикл void loop давольно сильно на долго преривается может на сек 2 — 3 (с 11 -ю сообщениями).
У меня в это время (раз в 5 сек) все остальные функции скетча очень сильно подвисало. И наконец то мне пришла в голову идиальная идея, как получить преривание loop длительностью всего в 1 сообщение (не важно сколько их будет).
В общем решение хитрое, нужно сделать так что бы за один цикл void loop отправлялось только одно сообщение, все последующие распределены по 1 шт, на 1 цикл void loop. В кратце: что бы отправить 10 сообщений нужно что бы цикл void loop повторился 10 раз.
С таким подходом все работает гораздо быстрей. Раз в 5 сек начинает отправлятся 10 (у меня даже 11) исходящих сообщений, за 11 циклов void loop, после чего таймер обнуляется вновь что бы вновь через 5 сек все повторилось.
-
#11
нужно сделать так что бы за один цикл void loop отправлялось только одно сообщение
Ну у меня в коде так и сделано. Выгребаю из Serial порта полностью одно сообщение, отправляю, затем снова Loop и снова чтение из Serial порта.
-
#12
@max506, ну в общем то я и др. самую знаменитую библиатеку pubsubclient точно так же победил, но только там тот же косяк был с подписками, сделал так что бы создавалась только одна подписка за цикл loop, и в общем то библиотека работает довольно таки быстро, ничего не виснет, отправляю в тэст — примере 8 исходящих сообщений (на которые сама библиотека не подписана) и все за один цикл loop.
И что нам сейчас делать? Так лень переписывать огромный скетч под др. либу.
-
#14
@krepton85 Тоже столкнулся с такой проблемой, 5 топиков шлет без проблем, на 6 виснет. Скетчем не поделитесь?
-
#18
@krepton85
Спасибо, все получилось, еще бы научили push уведомления отправлять.
-
#19
Вот код, которым я пользуюсь
Код:
#include <ESP8266WiFi.h> #include <PubSubClient.h> const char *ssid = "......"; // Имя вайфай точки доступа const char *pass = "......"; // Пароль от точки доступа const char *mqtt_server = "......"; // Имя сервера MQTT const int mqtt_port = 1883; // Порт для подключения к серверу MQTT const char *mqtt_user = ""; const char *mqtt_pass = ""; String subscr_topic = "/esp/topic1/"; String prefix = "/esp/"; String buf_recv; WiFiClient wclient; PubSubClient client(wclient, mqtt_server, mqtt_port); // Функция получения данных от MQTT брокера void callback_subscr(const MQTT::Publish &pub) { String topic = pub.topic(); String value = pub.payload_string(); if( topic.substring(0,subscr_topic.length()) == subscr_topic) // передаем в UART только данные, на которые подписывались Serial.println(topic.substring(subscr_topic.length())+"="+value); } // Отправка данных на MQTT брокер void Send(){ char ch; String pub_topic; String val; int pos_delim; long t; // полчение данных по UART от Arduino while (Serial.available()) { ch = (char)Serial.read(); if (ch == 'r') continue; if (ch == 'n') { // Данные приходят в виде строк в формате <тема>=<значение> pos_delim = buf_recv.indexOf('='); pub_topic = buf_recv.substring(0,pos_delim); val = buf_recv.substring(pos_delim+1); // #### Вызов метода публикации "виснет" на 200 миллисекунд, если предварительно не подписаться на публикуемую тему !!!!! t=millis(); client.publish(prefix+pub_topic,val); Serial.println(millis()-t); buf_recv=""; break; } buf_recv += ch; } } void setup() { Serial.begin(9600); } void loop() { // подключаемся к wi-fi if (WiFi.status() != WL_CONNECTED) { Serial.print("Connecting to "); Serial.print(ssid); Serial.println("..."); WiFi.begin(ssid, pass); if (WiFi.waitForConnectResult() != WL_CONNECTED) return; Serial.println("WiFi connected"); } // подключаемся к MQTT серверу if (WiFi.status() == WL_CONNECTED) { if (!client.connected()) { Serial.println("Connecting to MQTT server"); if ( client.connect(MQTT::Connect("ESP_Witty").set_auth(mqtt_user, mqtt_pass)) ) { Serial.println("Connected to MQTT server"); client.set_callback(callback_subscr); client.subscribe(subscr_topic+"#"); // подписывааемся на темы с изменяемыми данными } else { Serial.println("Could not connect to MQTT server"); } } if (client.connected()){ client.loop(); Send(); } } }
А у вас есть пример скетча для ардуины, на получения данных по UART ??
-
#20
Товарищи, помогите пожалуйста с решением задачки, у меня схожая проблема. Написал скетч который запоминает состояние после включениявыключения реле на esp8266-01S, и вносит его в EEPROM, после нештатного выключения электричества реле возвращается в исходное состояние. Т.е. после подачи питания мне нужно передать состояние на MQTT-сервер. В сущности, pubSubClientPublishing() нужно вызвать до pubSubClientSubscribe(), потому как pubSubClientSubscribe() следит за топиком и соответственно включает или выключает если в топике появляется 0 или 1. Скетч мой работает, но работает только после того как вызвана функа подписки. Пробовал делать паузу, т.к. было подозрение что публикация запускается раньше доступности сервера MQTT, потом подключил библиотеку 8266PING, после получения true на ответ сервера MQTT передает состояние в топик, и все равно не могу передать состояние (топик пустой), пока не будет выполнена подписка.
Offline
Зарегистрирован: 25.12.2015
добрый вечер всем нашёл этот скетч и обрадовался потому что это то что я и хотел но не тут было ни как не могу скомпилировать этот скетч , постоянно какие то ошибки сначала с библиотеками были вроде решил потом со строками
EthernetClient ethClient; //ЗДЕСЬ КОМЕНТИРУЮ И КОПИРУЮ В ДРУГОЕ МЕСТО НИЖЕ
PubSubClient client(server, 1883, callback, ethClient);
перенёс их ниже как подсказали эта ошибка исчезла и вот теперь уже несколько дней мучаюсь с ошибкой 58 строка
DHT DHT; ошибка no matching function for call to ‘DHT::DHT()’
я думаю что проблема с библиотекой но я несколько установил проблема не исчезла . IDE 16.6
но пробовал и другие если кому не сложно выложите библиотеку DHT с которой этот скетч компилируется ну и заодно свой скетч и версию IDE. сейчас у меня ват такой скетч
#include <SPI.h> // Ethernet shield
#include <Ethernet.h> // Ethernet shield
#include <PubSubClient.h> // MQTT
#include <Servo.h>
#include <DHT.h>
#include <OneWire.h>
#include <DallasTemperature.h>
Servo servo;
byte mac[] = { 0xC1, 0x7C, 0x38, 0x41, 0x89, 0x12 };
byte server[] = { 192, 168, 1, 190 }; //IP Брокера
byte ip[] = { 192, 168, 1, 167 }; //IP Клиента (Arduino)
//EthernetClient ethClient; //ЗДЕСЬ КОМЕНТИРУЮ И КОПИРУЮ В ДРУГОЕ МЕСТО НИЖЕ
//PubSubClient client(server, 1883, callback, ethClient);
#define id_connect "myhome-kitchen"
#define Prefix_subscribe "myhome/Kitchen/"
///////////////Объявляем порты ввода-вывода
#define ServoPin 3 //Порт к которому подключен сервопривод
const int start_DI_pin [] = {2, 4, 5}; // Порты Ввода
int n_DI_pin = sizeof(start_DI_pin) / sizeof(start_DI_pin[0]) - 1; //Вычисляем длинну массива
const int start_DO_pin [] = {6, 7}; //Порты Вывода
int n_DO_pin = sizeof(start_DO_pin) / sizeof(start_DO_pin[0]) - 1; //Вычисляем длинну массива
int DI[] = {0, 0, 0};
int old_DI[] = {0, 0};
///////////////////////////Переменные для работы с освещением//////////////////////////////////////
int ServoAngle = 100; //Угол сервопривода при включении
int flag = 0;
int flag2 = 0;
int pause = 0;
//------------------------------------------- Sensors -------------------------------------------//
const int MQ7_Pin = A0; // Куда подключили MQ7
//int MQ7Value = 0;
int MQ7Value = analogRead(MQ7_Pin);
const int foto_Pin = A1; // устанавливаем входную ногу для Фоторезистора
//unsigned int fotoValue = 0; // цифровое значение фоторезистора
unsigned int fotoValue = analogRead(foto_Pin);
#define ONE_WIRE_BUS 8
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature DS_sensors(&oneWire);
// 28 FF F2 5C 53 15 2 97
DeviceAddress addr_T1 = { 0x28, 0xFF, 0xF2, 0x5C, 0x53, 0x15, 0x02, 0x97 };
float T1 = 0;
DHT DHT;
#define DHT22_PIN 9
float Hout = 0;
float Tout = 0;
//#define DHTPIN 2 // Номер пина, к которому подсоединен датчик
//#define DHTTYPE DHT22 // Задаём тип DHT датчика
//DHT dht(DHTPIN, DHTTYPE);
////////////////////////////////////////////////////////////////////////////
void callback(char* topic, byte* payload, unsigned int length) {
payload[length] = '';
// Serial.print(topic);
// Serial.print("=");
String strTopic = String(topic);
String strPayload = String((char*)payload);
// Serial.println(strPayload);
callback_iobroker(strTopic, strPayload);
}
EthernetClient ethClient; //ЗДЕСЬ КОМЕНТИРУЮ И КОПИРУЮ В ДРУГОЕ МЕСТО НИЖЕ
PubSubClient client(server, 1883, callback, ethClient);
////////////////////////////////////////////////////////////////////////////
void setup() {
//Serial.begin(57600);
// Serial.println("start");
//Объявляем порты Digital inputs/outputs
for (int i = 0 ; i <= n_DI_pin; i++) {
pinMode (start_DI_pin [i], INPUT);
}
digitalWrite(5, HIGH); //Окно
digitalWrite(4, HIGH); //Объемник
for (int i = 0 ; i <= n_DO_pin; i++) {
pinMode (start_DO_pin [i], OUTPUT);
}
Ethernet.begin(mac, ip);
if (client.connect(id_connect)) {
getSensors();
control();
// client.publish("myhome/Kitchen/Change_Counter", "0");
// client.publish("myhome/Kitchen/Temp_room", "0");
// client.publish("myhome/Kitchen/Humidity_room", "0");
// client.publish("myhome/Kitchen/Temp_radiator", "0");
// client.publish("myhome/Kitchen/Temp_in", "0");
// client.publish("myhome/Kitchen/Lux", "0");
// client.publish("myhome/Kitchen/Servo", "0");
// client.publish("myhome/Kitchen/MQ7", "0");
client.subscribe("myhome/Kitchen/#");
}
}
/////////////////////////////////////////////////////////////////////////
void loop() {
client.loop();
control();
getSensors();
if (!client.connected()) {
if (client.connect(id_connect)) {
control();
getSensors();
client.subscribe("myhome/Kitchen/#");
}
}
}
и отдельно Functions
/////////////////////////////////От Брокера//////////////////////////////////////////////
void callback_iobroker(String strTopic, String strPayload){
if (strTopic == "myhome/Kitchen/Servo"){
ServoAngle=strPayload.toInt();
if (ServoAngle >= 0 && ServoAngle <= 255){
servo.attach(ServoPin);
//delay(200); //ждем 2 секунды
servo.write(ServoAngle); //ставим вал под 0
delay(1000); //ждем 2 секунды
//client.publish("myhome/Kitchen/Servo", b);
servo.detach();
}
}
}
////////////////////////////////////Брокеру/////////////////////////////////////
void control(){
if(digitalRead(5)==HIGH && flag==0) { //если окно открыто
client.publish("myhome/Kitchen/Window", "1");
flag=1;
}
if(digitalRead(5)==LOW && flag==1){//если окно закрыто
client.publish("myhome/Kitchen/Window", "0");
flag=0;//обнуляем переменную flag
}
if(digitalRead(4)==HIGH && flag2==0) { // Если есть движение
client.publish("myhome/Kitchen/Motion", "1");
flag2=1;
}
if(digitalRead(4)==LOW && flag2==1){// Если нет движения
client.publish("myhome/Kitchen/Motion", "0");
flag2=0;//обнуляем переменную flag
}
}
///////////////////////////////Данные сенсоров////////////////////////////////////
void getSensors () {
MQ7Value = analogRead(MQ7_Pin);
fotoValue = analogRead(foto_Pin); // считываем значение с фоторезистора
// ServoAngle = analogRead(2);
//Обработка данных датчика DHT22. Подключение к порту цифровому P9 Arduino
//Глобальные переменные Hout и Tout типа флоат - влажность (%) и температура (град. С)
if (DHT.read22(DHT22_PIN)== DHTLIB_OK) {
Hout = DHT.humidity;
Tout = DHT.temperature;
}
if (Hout == 0 || Tout == 0){
delay (1000);
if (DHT.read22(DHT22_PIN)== DHTLIB_OK) {
Hout = DHT.humidity;
Tout = DHT.temperature;
}
}
//Обработка данных цифровых датчиков температуры типа DS18B20.
//Шина 1-Wire на цифровой пин P8 Arduino.
//Подключено 2 датчика температуры, адреса задаются в секции глобальных констант "Sensors"
//Три значение температуры T1, T2, типа float (град. С).
DS_sensors.requestTemperatures();
T1 = DS_sensors.getTempC(addr_T1);
///////////////////////Паблик данных сенсоров////////////////////////
if (pause == 50 || pause == 0){
char b[5];
String char_Hout = String(Hout);
char_Hout.toCharArray(b,5);
client.publish("myhome/Kitchen/Humidity_room", b);
String char_Tout = String(Tout);
char_Tout.toCharArray(b,5);
client.publish("myhome/Kitchen/Temp_room", b);
String char_T1 = String(T1);
char_T1.toCharArray(b,5);
client.publish("myhome/Kitchen/Temp_radiator", b);
String char_fotoValue = String(fotoValue);
char_fotoValue.toCharArray(b,4);
client.publish("myhome/Kitchen/Lux", b);
String char_ServoAngle = String(ServoAngle);
char_ServoAngle.toCharArray(b,4);
client.publish("myhome/Kitchen/Servo", b);
String char_MQ7Value = String(MQ7Value);
char_MQ7Value.toCharArray(b,4);
client.publish("myhome/Kitchen/MQ7", b);
pause = 1;
}
else pause++;
}
а вот скетч целиком http://forum.iobroker.net/download/file.php?id=2951
Можете подсказать отчего у меня всё так получается.
Заранее всем спасибо за ответы жду ответов
|
big_pig 2 / 2 / 0 Регистрация: 19.02.2019 Сообщений: 48 |
||||
|
1 |
||||
|
06.01.2020, 20:16. Показов 1962. Ответов 0 Метки lua (Все метки)
Здравствуйте не давно начал изучать платформу esp8266 в данном случае использую NodeMcu V2 Lua на чипах ESP8266 и CP2102 Когда я подключаюсь к MQTT серверу мне отладка выдает ошибку «MQTT — none» не однократно проверял строки с данными подключения но все еще не знаю где именно ошибка
__________________
0 |
I have an MQTT server (Mosquitto) running on a RPi3. I also have a sensor array on my bench that publishes readings to MQTT every 5 seconds. All of this is working great.
Tonight, I wired up an ESP8266-01 to an Arduino Mega using one of the Mega’s extra hardware serial ports (rx1, tx1). I’m using two libraries in my sketch: (1) WiFiEsp and (2) PubSubClient. I’ve tried both O’Leary’s PubSubClient and Imroy’s branch off O’Leary’s PubSubClient. I get the same result with each.
When I power up my Mega with it’s ESP8266 shield, it connects to WiFi and the MQTT broker fine. However, its not receiving any messages. It also drops the connection to the MQTT broker every minute or so. It immediately reconnects. The blue transmit LED on the ESP8266 is cycling extremely fast. Way too fast for the message traffic on my MQTT server.
I’m using proper level shifting between the devices. When I put a scope on the Mega’s rx1, I see a continuous trace of data that only stops upon disconnect.
In a similar post here, ankur posted just yesterday that there is a bug in the callback. I think he’s probably referring to the PubSubClient library. PubSubClient is a very popular library that a lot of people are using. Can anyone comment further on the nature of the bug that ankur alluded to? I’ll post my code below.
If anyone else runs into this issue, I also tested another variant of this configuration. I put my WiFi client code and my MQTT client code directly on the ESP8266’s micro and connected the ESP8266 to an Arduino Uno via SoftwareSerial at 19200 baud. The connection to my MQTT server is rock solid and all messages are coming through flawlessly.
My code on the Mega follows:
#include <WiFiEsp.h>
#include <PubSubClient.h>
const char *ssid = "********";
const char *pass = "********";
int status = WL_IDLE_STATUS;
#define BUFFER_SIZE 100
IPAddress server(10, 0, 1, 6);
// initialize WiFi client
WiFiEspClient espClient;
// connect to mqtt server
PubSubClient client(espClient);
void callback(const MQTT::Publish& pub) {
if (pub.has_stream()) {
uint8_t buf[BUFFER_SIZE];
int read;
while (read = pub.payload_stream()->read(buf, BUFFER_SIZE)) {
Serial.write(buf, read);
}
pub.payload_stream()->stop();
Serial.println("");
} else
Serial.println(pub.payload_string());
}
void setup() {
pinMode(19, INPUT_PULLUP); // pull rx1 high
Serial.begin(9600);
Serial1.begin(9600);
WiFi.init(&Serial1);
// check for the presence of the shield
if (WiFi.status() == WL_NO_SHIELD) {
Serial.println("WiFi shield not present");
// don't continue
while (true);
}
// attempt to connect to WiFi network
while (status != WL_CONNECTED) {
Serial.print("Attempting to connect to WPA SSID: ");
Serial.println(ssid);
// Connect to WPA/WPA2 network
status = WiFi.begin(ssid, pass);
}
Serial.println("You're connected to the network");
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
}
void reconnect() {
if (!client.connected()) {
client.set_server(server, 1883);
client.connect("AVR101");
client.subscribe("ishnalaIOT");
client.set_callback(callback);
}
}