Void callback const mqtt publish pub ошибка

Arduino Forum

Loading

PlatformIO Community

Loading

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
.

Arduino.ru

Загрузка…

I am continuously getting error message
‘mqtt’ does not name a type

I am using Arduino 1.8.1, i tried using following libraries
#include <ESP8266WiFi.h>
#include «Adafruit_MQTT.h»
#include «Adafruit_MQTT_Client.h»
#include <ESP8266Ping.h>
#include <PubSubClient.h>

Still facing the issue, kindly help
Error Message:

Arduino: 1.8.10 (Windows 10), Board: «NodeMCU 1.0 (ESP-12E Module), 80 MHz, Flash, Disabled, All SSL ciphers (most compatible), 4M (no SPIFFS), v2 Lower Memory, Disabled, None, Only Sketch, 115200»

t4:120:3: error: ‘mqtt’ does not name a type

mqtt.subscribe(&R1);

^

t4:121:3: error: ‘mqtt’ does not name a type

mqtt.subscribe(&R2);

^

t4:122:3: error: ‘mqtt’ does not name a type

mqtt.subscribe(&R3);

^

t4:123:3: error: ‘mqtt’ does not name a type

mqtt.subscribe(&R4);

^

t4:124:3: error: ‘mqtt’ does not name a type

mqtt.subscribe(&R5);

^

t4:125:3: error: ‘mqtt’ does not name a type

mqtt.subscribe(&R6);

^

t4:126:3: error: ‘mqtt’ does not name a type

mqtt.subscribe(&R7);

^

t4:127:3: error: ‘mqtt’ does not name a type

mqtt.subscribe(&R8);

^

t4:129:1: error: expected declaration before ‘}’ token

}

^

Multiple libraries were found for «ESP8266WiFi.h»
Used: C:UsersprjadAppDataLocalArduino15packagesesp8266hardwareesp82662.5.2librariesESP8266WiFi
Multiple libraries were found for «Adafruit_MQTT.h»
Used: C:UsersprjadDocumentsArduinolibrariesAdafruit_MQTT_Library
Not used: C:UsersprjadDocumentsArduinolibrariesAdafruit_MQTT_Library-master
Multiple libraries were found for «ESP8266Ping.h»
Used: C:UsersprjadDocumentsArduinolibrariesESP8266Ping-master
Multiple libraries were found for «PubSubClient.h»
Used: C:UsersprjadDocumentsArduinolibrariespubsubclient-master
Not used: C:UsersprjadDocumentsArduinolibrariesPubSubClient-2.7.0
exit status 1
‘mqtt’ does not name a type

This report would have more information with
«Show verbose output during compilation»
option enabled in File -> Preferences.

Code M using

/***************************************************
Adafruit MQTT Library ESP8266 Example
Must use ESP8266 Arduino from:
https://github.com/esp8266/Arduino
Works great with Adafruit’s Huzzah ESP board & Feather
—-> https://www.adafruit.com/product/2471
—-> https://www.adafruit.com/products/2821
Adafruit invests time and resources providing this open source code,
please support Adafruit and open-source hardware by purchasing
products from Adafruit!
Written by Tony DiCola for Adafruit Industries.
MIT license, all text above must be included in any redistribution
****************************************************/
#include <ESP8266WiFi.h>
#include «Adafruit_MQTT.h»
#include «Adafruit_MQTT_Client.h»
#include <ESP8266Ping.h>
#include <PubSubClient.h>

/************************* WiFi Access Point *********************************/

#define WLAN_SSID «xxxxxxxxx»
#define WLAN_PASS «xxxxxxxxx»

#define REMOTE_HOST «www.google.com»

/************************* Adafruit.io Setup *********************************/

#define AIO_SERVER «io.adafruit.com»
#define AIO_SERVERPORT 1883 // use 8883 for SSL
#define AIO_USERNAME «xxxxxx»
#define AIO_KEY «xxxxxxx»

/************ Global State (you don’t need to change this!) ******************/

// Create an ESP8266 WiFiClient class to connect to the MQTT server.
WiFiClient client;
// or… use WiFiFlientSecure for SSL
//WiFiClientSecure client;

// Setup the MQTT client class by passing in the WiFi client and MQTT server and login details.
Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);

/****************************** Feeds ***************************************/

// Setup a feed called ‘photocell’ for publishing.
// Notice MQTT paths for AIO follow the form: /feeds/
//Adafruit_MQTT_Publish photocell = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME «/feeds/photocell»);

// Setup a feed called ‘onoff’ for subscribing to changes.

Adafruit_MQTT_Subscribe R1 = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME «/feeds/R1»);
Adafruit_MQTT_Subscribe R2 = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME «/feeds/R2»);
Adafruit_MQTT_Subscribe R3 = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME «/feeds/R3»);
Adafruit_MQTT_Subscribe R4 = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME «/feeds/R4»);
Adafruit_MQTT_Subscribe R5 = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME «/feeds/R5»);
Adafruit_MQTT_Subscribe R6 = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME «/feeds/R6»);
Adafruit_MQTT_Subscribe R7 = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME «/feeds/R7»);
Adafruit_MQTT_Subscribe R8 = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME «/feeds/R8»);

/*************************** Sketch Code ************************************/

// Bug workaround for Arduino 1.6.6, it seems to need a function declaration
// for some reason (only affects ESP8266, likely an arduino-builder bug).
void MQTT_connect();

void setup() {
Serial.begin(115200);
delay(10);
pinMode(5, OUTPUT);
pinMode(4, OUTPUT);
pinMode(0, OUTPUT);
pinMode(2, OUTPUT);
pinMode(14, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
pinMode(15, OUTPUT);

Serial.println(F(«Adafruit MQTT demo»));

// Connect to WiFi access point.

Serial.begin(115200);
delay(10);

// We start by connecting to a WiFi network

Serial.println();
Serial.println(«Connecting to WiFi»);

WiFi.setSleepMode(WIFI_NONE_SLEEP);
WiFi.begin(WLAN_SSID, WLAN_PASS);

while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(«.»);
}

Serial.println();
Serial.print(«WiFi connected with ip «);
Serial.println(WiFi.localIP());

Serial.print(«Pinging host «);
Serial.println(REMOTE_HOST);

if(Ping.ping(REMOTE_HOST)) {
Serial.println(«Success!!»);
} else {
Serial.println(«Error :(«);
}
}

// Setup MQTT subscription for onoff feed.
mqtt.subscribe(&R1);
mqtt.subscribe(&R2);
mqtt.subscribe(&R3);
mqtt.subscribe(&R4);
mqtt.subscribe(&R5);
mqtt.subscribe(&R6);
mqtt.subscribe(&R7);
mqtt.subscribe(&R8);

}

uint32_t x=0;

void loop() {
// Ensure the connection to the MQTT server is alive (this will make the first
// connection and automatically reconnect when disconnected). See the MQTT_connect
// function definition further below.
MQTT_connect();

// this is our ‘wait for incoming subscription packets’ busy subloop
// try to spend your time here

Adafruit_MQTT_Subscribe *subscription;
while ((subscription = mqtt.readSubscription(5000))) {
if (subscription == &R1) {
Serial.print(F(«Got_R1: «));
Serial.println((char *)R1.lastread);
int num = atoi((char *)R1.lastread);
digitalWrite (5,num);
}

 if (subscription == &R2) {
  Serial.print(F("Got_R2: "));
  Serial.println((char *)R2.lastread);
  int num = atoi((char *)R2.lastread);
  digitalWrite (4,num);
}

   if (subscription == &R3) {
  Serial.print(F("Got_R3: "));
  Serial.println((char *)R3.lastread);
  int num = atoi((char *)R3.lastread);
  digitalWrite (0,num);
}

 if (subscription == &R4) {
  Serial.print(F("Got_R4: "));
  Serial.println((char *)R4.lastread);
  int num = atoi((char *)R4.lastread);
  digitalWrite (2,num);
}

   if (subscription == &R5) {
  Serial.print(F("Got_R5: "));
  Serial.println((char *)R5.lastread);
  int num = atoi((char *)R5.lastread);
  digitalWrite (14,num);
}

   if (subscription == &R6) {
  Serial.print(F("Got_R6: "));
  Serial.println((char *)R6.lastread);
  int num = atoi((char *)R6.lastread);
  digitalWrite (12,num);
}

   if (subscription == &R7) {
  Serial.print(F("Got_R7: "));
  Serial.println((char *)R7.lastread);
  int num = atoi((char *)R7.lastread);
  digitalWrite (13,num);
}

   if (subscription == &R8) {
  Serial.print(F("Got_R8: "));
  Serial.println((char *)R8.lastread);
  int num = atoi((char *)R8.lastread);
  digitalWrite (15,num);
 }

}

// Now we can publish stuff! — If you want publishing use the following code
// Serial.print(F(«nSending photocell val «));
// Serial.print(x);
//Serial.print(«…»);
// if (! photocell.publish(x++)) {
// Serial.println(F(«Failed»));
// } else {
// Serial.println(F(«OK!»));
// }

// ping the server to keep the mqtt connection alive
// NOT required if you are publishing once every KEEPALIVE seconds
/*
if(! mqtt.ping()) {
mqtt.disconnect();
}
*/
}

// Function to connect and reconnect as necessary to the MQTT server.
// Should be called in the loop function and it will take care if connecting.
void MQTT_connect() {
int8_t retries=3;

// Stop if already connected.
if (mqtt.connected()) {
return;
}

Serial.print(«Connecting to MQTT… «);

uint8_t retries = 3;
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
retries—;
if (retries == 0) {
// basically die and wait for WDT to reset me
while (1);
}
}
Serial.println(«MQTT Connected!»);
}

Loading

I read about this issue (seems quite common) for hours without finding any applicable solution to my situation. I understand that there might be a problem related to the included files and libraries, but I’m not actually able to find what’s wrong.

It’s an Arduino script that uses the MQTT client library. It works beautifully with the old PubSubClient.h lib.

Now I wanted to update the lib with a recent one. The function definitions are changed so I made the changes in the sketch and switched the lib in the Arduino/library directory, then restarted the Arduino IDE. I get lot of «error: ‘argument’ does not name a type» and I really don’t know what to fix.

Here you can find the .h and .cpp files organization to understand what’s happening.

//device.ino file

#include "device.h"

//device.h file

#ifndef DEVICE_H
#define DEVICE_H

#include <WiFiClient.h>
#include <WiFiClientSecure.h>
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#include <ESP8266HTTPUpdateServer.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
#include <jsmn.h>
#include <Arduino.h>
#include <pgmspace.h>
#include "mqtt.h"

#endif

mqtt.h file

#ifndef MQTT_H
#define MQTT_H

#include "device.h"

#endif

mqtt.cpp file

#include "mqtt.h"

WiFiClient wifi_client;
PubSubClient mqtt_client(wifi_client);
mqtt_client.setServer(mqtt_server, MQTT_BROKER_PORT);
mqtt_client.setCallback(mqtt_callback);

Finally the errors the compiler throws out:
mqtt.cpp:19: error:
‘mqtt_client’ does not name a type

     mqtt_client.setServer(mqtt_server, MQTT_BROKER_PORT);

     ^

    mqtt.cpp:20: error: 'mqtt_client' does not name a type

     mqtt_client.setCallback(mqtt_callback);

     ^

    sketchmqtt.cpp: In function 'void mqtt_publish_mex(String, String, bool)':

    mqtt.cpp:27: error: no matching function for call to 'PubSubClient::publish(String&, String&, bool&)'

             if (mqtt_client.publish(topic, jmex, retained)) {

                                                          ^

    sketchmqtt.cpp:27:54: note: candidates are:

    In file included from sketchWalvola.h:25:0,

                     from sketchmqtt.h:4,

                     from sketchmqtt.cpp:1:

    C:UsersFabrizio & DarioDocumentsArduinolibrariespubsubclientsrc/PubSubClient.h:130:12: note: boolean PubSubClient::publish(const char*, const char*)

        boolean publish(const char* topic, const char* payload);

                ^

    C:UsersFabrizio & DarioDocumentsArduinolibrariespubsubclientsrc/PubSubClient.h:130:12: note:   candidate expects 2 arguments, 3 provided

    C:UsersFabrizio & DarioDocumentsArduinolibrariespubsubclientsrc/PubSubClient.h:131:12: note: boolean PubSubClient::publish(const char*, const char*, boolean)

        boolean publish(const char* topic, const char* payload, boolean retained);

                ^

    C:UsersFabrizio & DarioDocumentsArduinolibrariespubsubclientsrc/PubSubClient.h:131:12: note:   no known conversion for argument 1 from 'String' to 'const char*'

    C:UsersFabrizio & DarioDocumentsArduinolibrariespubsubclientsrc/PubSubClient.h:132:12: note: boolean PubSubClient::publish(const char*, const uint8_t*, unsigned int)

        boolean publish(const char* topic, const uint8_t * payload, unsigned int plength);

                ^

    C:UsersFabrizio & DarioDocumentsArduinolibrariespubsubclientsrc/PubSubClient.h:132:12: note:   no known conversion for argument 1 from 'String' to 'const char*'

    C:UsersFabrizio & DarioDocumentsArduinolibrariespubsubclientsrc/PubSubClient.h:133:12: note: boolean PubSubClient::publish(const char*, const uint8_t*, unsigned int, boolean)

        boolean publish(const char* topic, const uint8_t * payload, unsigned int plength, boolean retained);

                ^

    C:UsersFabrizio & DarioDocumentsArduinolibrariespubsubclientsrc/PubSubClient.h:133:12: note:   candidate expects 4 arguments, 3 provided

    sketchmqtt.cpp: In function 'void mqtt_log(String)':

    mqtt.cpp:347: error: no matching function for call to 'PubSubClient::publish(const String&, String&)'

             mqtt_client.publish(mqtt_controllers_topic_debug, json_string);

                                                                          ^

    sketchmqtt.cpp:347:70: note: candidates are:

    In file included from sketchWalvola.h:25:0,

                     from sketchmqtt.h:4,

                     from sketchmqtt.cpp:1:

    C:UsersFabrizio & DarioDocumentsArduinolibrariespubsubclientsrc/PubSubClient.h:130:12: note: boolean PubSubClient::publish(const char*, const char*)

        boolean publish(const char* topic, const char* payload);

                ^

    C:UsersFabrizio & DarioDocumentsArduinolibrariespubsubclientsrc/PubSubClient.h:130:12: note:   no known conversion for argument 1 from 'const String' to 'const char*'

    C:UsersFabrizio & DarioDocumentsArduinolibrariespubsubclientsrc/PubSubClient.h:131:12: note: boolean PubSubClient::publish(const char*, const char*, boolean)

        boolean publish(const char* topic, const char* payload, boolean retained);

                ^

    C:UsersFabrizio & DarioDocumentsArduinolibrariespubsubclientsrc/PubSubClient.h:131:12: note:   candidate expects 3 arguments, 2 provided

    C:UsersFabrizio & DarioDocumentsArduinolibrariespubsubclientsrc/PubSubClient.h:132:12: note: boolean PubSubClient::publish(const char*, const uint8_t*, unsigned int)

        boolean publish(const char* topic, const uint8_t * payload, unsigned int plength);

                ^

    C:UsersFabrizio & DarioDocumentsArduinolibrariespubsubclientsrc/PubSubClient.h:132:12: note:   candidate expects 3 arguments, 2 provided

    C:UsersFabrizio & DarioDocumentsArduinolibrariespubsubclientsrc/PubSubClient.h:133:12: note: boolean PubSubClient::publish(const char*, const uint8_t*, unsigned int, boolean)

        boolean publish(const char* topic, const uint8_t * payload, unsigned int plength, boolean retained);

                ^

    C:UsersFabrizio & DarioDocumentsArduinolibrariespubsubclientsrc/PubSubClient.h:133:12: note:   candidate expects 4 arguments, 2 provided

    In file included from sketchmqtt.h:4:0,

                     from sketchmqtt.cpp:1:

    sketchmqtt.cpp: In function 'void mqtt_callback(char*, byte*, unsigned int)':

    mqtt.cpp:375: error: request for member 'payload_string' in 'payload', which is of non-class type 'byte* {aka unsigned char*}'

             log(payload.payload_string());

                         ^

    sketchWalvola.h:89:67: note: in definition of macro 'log'

     #define log(mex) if (DEBUG) {Serial.println(walvola_time + "::" + mex);Serial.flush(); if(MQTT_DEBUG) {mqtt_log(walvola_time + "::" + mex);}}

                                                                       ^

    mqtt.cpp:375: error: request for member 'payload_string' in 'payload', which is of non-class type 'byte* {aka unsigned char*}'

             log(payload.payload_string());

                         ^

    sketchWalvola.h:89:135: note: in definition of macro 'log'

     #define log(mex) if (DEBUG) {Serial.println(walvola_time + "::" + mex);Serial.flush(); if(MQTT_DEBUG) {mqtt_log(walvola_time + "::" + mex);}}

                                                                                                                                           ^

    mqtt.cpp:379: error: request for member 'payload_string' in 'payload', which is of non-class type 'byte* {aka unsigned char*}'

             if (mqtt2JSONkvs(payload.payload_string())) {

                                      ^

    mqtt.cpp:404: error: a function-definition is not allowed here before '{' token

     {

     ^

    mqtt.cpp:512: error: expected '}' at end of input

     }

     ^

    Più di una libreria trovata per "WiFiClient.h"
    Usata: C:UsersFabrizio & DarioAppDataLocalArduino15packagesesp8266hardwareesp82662.3.0librariesESP8266WiFi
    Non usata: C:Program Files (x86)ArduinolibrariesWiFi
    Non usata: C:Program Files (x86)ArduinolibrariesWiFi
    Non usata: C:Program Files (x86)ArduinolibrariesWiFi
    Non usata: C:Program Files (x86)ArduinolibrariesWiFi
    exit status 1
    'mqtt_client' does not name a type

Thanks for the help!

<<< Назад

Шлюз MQTT — ИК и RF315МГц на ESP8266


Pacific (2019-01-02 09:36:58):

krepton85, а как дружат между собой ESP и радиоприемник? У меня в другом проекте из-за ESP радиоприемник на 315 и 433 ловит не дальше 3 метров.

krepton85 (2019-01-02 10:49:19):

Прекрасно работает радиоприемник, у меня уже 2 проекта на esp8266 и радиоприемник на 315Мгц.
Но проблема мне ваша извесна, у вас скорей всего радиоприемники не правильные, без кварца, используйце те что у меня на фото и будет вам счастье. Еще рекомендую купить готовые антеннки-пружинки на нужную частату 315 или 433Мгц.

Pacific (2019-01-02 10:59:21):

Спасибо, это обнадеживает. У меня горсть приемников — с кварцами и без, надо вернуться к экспериментам

@ZAMCTB (2019-01-18 22:51:38):

ошибка при компиляции — ‘MQTT’ does not name a type

Strangeman (2019-01-22 22:24:27):

Я вот чего не понял. Зачем в данном проекте второй радиоканал?
ESPшка уже содержит WiFi и он коннектится к сети.
Что делает радиоканал на 315 и 433 МГц?

krepton85 (2019-01-22 23:14:17):

Strangeman, так это же, для управления радио-реле промышленными для люстр например. А вообще планирую сюда еще термометр подключить ds18b20 , что бы получить устройство «все в одном».

krepton85 (2019-01-22 23:17:44):

@ZAMCTB, это потаму что не ту (либо ее вообще нет) библиатеку MQTT используете их существует 2 версии, одна на char * строках построена, а в моем случае та, что на String (объект класса) построенна.

Strangeman (2019-01-22 23:20:12):

Понял, спасибо. Еще один вопрос. На фото один светодиод, как Вы обучаете устройство? Как считываете коды ПУ кондиционера.

@ZAMCTB (2019-01-22 23:32:28):

эта очень крутая штукенция, у меня есть сонофф рф бридж, но я по сусекам поскрёб и все компоненты нашёл для её сборки…. аж руки дрожат как хочется собрать и прошить… СПАСИБО ДОБРЫЙ ЧЕЛОВЕК ЗА ТАКОЕ… Иду библиотеки править…

krepton85 (2019-01-23 00:04:55):

Strangeman, света-диода планирую 3 последовательно подключить, но пока беда (они закончились :) ) , там для обучения есть ИК фотоприемник, он спрятался под модулем esp8266 в районе антенны wi-fi.
С ИК излучателем пока не понятно что в моем случае делать, у меня в комнате 3 устройства которыми нужно упровлять по ИК и все в разных местах и на разной высате находятся, куда ставить этот шлюз я пока в растеренности. Что касается кондиционеров то их библиатека IR Remote думаю не поддерживает, в скетче можно у видеть какие кадировки поддерживает мой шлюз.
Код кнопки что хранится в свойствах объекта расшифровывается просто:
например t:3,d:f549c27a,l:32;
где t:значение, — это порядковый номер кодировки в списке кадировак;
d:hex значение, — сам код кнопки в hex системе счисления;
l:значение; — это длинна кода в битах в системе DEC счисления.

@ZAMCTB (2019-01-23 01:46:14):

Установил ВСЕ библиотеки MQTT (выключал их по очереди), но вылазит ошибка…. не компилируется скетч… О горе какое!

Используется: C:UsersDocumentsArduinolibrariesPubSubClient
Не используется: C:UsersDocumentsArduinolibrariesCMMC_MQTT_Connector
Не используется: C:UsersDocumentsArduinolibrariesAzureIoTHubMQTTClient
Не используется: C:UsersDocumentsArduinolibrariesAntares_ESP8266_MQTT
exit status 1
‘MQTT’ does not name a type

@ZAMCTB (2019-01-23 01:49:24):

киньте бин хоть под нод мцу или вемос д1 мини — третью ночь не сплю…

krepton85 (2019-01-23 10:28:47):

@ZAMCTB, да эта она самая.

@ZAMCTB (2019-01-23 17:17:58):

krepton85, капец — прошил, но точка доступа не появляется… что за напасть — куда копать?
киньте бин хоть под нод мцу или вемос д1 мини — снова спать не смогу

https://t.me/ZAMCTB

krepton85 (2019-01-23 17:52:28):

@ZAMCTB, скетчь для всех плат на базе esp8266 одинаковый, нужно только выбрать правильную плату в arduino IDE. Что касаемо точки доступа то она должна запустится если в EEPROM esp8266 ничего не записано, она чистая, возможно ваш модуль уже побывал в др. проектах и в этой памяти eeprom есть какие то данные, которые при обновлении прошивки никогда не стираются, нужно записать в eeprom 512 байт объемом, значения = 255 dec, для этого есть скетчь в примерах arduino ide только там нужно подправить значение вместо нуля на 255,
вот скетчь:

include <EEPROM.h>

void setup()
{
EEPROM.begin(512);
// write a 0 to all 512 bytes of the EEPROM
for (int i = 0; i < 512; i++)
EEPROM.write(i, 255);

// turn the LED on when we’re done
pinMode(13, OUTPUT);
digitalWrite(13, HIGH);
EEPROM.end();
}

void loop()
{
}

залей его, дай запустится прошивке, что бы она очистила память eeprom, затем прошивай оснавной скетчь.
Так же как вариант поэксперементируй с версиями пакета для поддержки esp8266 в ардуино ide, только важно! не забывай удалять текущий пакет, прежде чем установить др. версию, а иначе будет глючить.

krepton85 (2019-01-23 18:10:57):

Ах да забыл сказать еще, но это на будущее, мой скетчь поддерживает обновление прошивки OTA — т.е. по Wi-Fi.
Вам понадобится готовая скомпелированная из скетча прошивка в формате *.bin. Что бы обновить уже готовое рабочее устройство перейдите в вашей локальной сети по адресу http://ip_вашего_шлюза/update и попадете на страницу обновления прошивки.

krepton85 (2019-01-23 18:16:24):

прошивку в бин формате можно получить после заgуска проверки в Ардуино IDE в папке приблизительно по следующему пути: C:UsersДмитрийAppDataLocalTemparduino_build_720426 она вас будет ждать там пока не закроете Ардуино IDE.

@ZAMCTB (2019-01-23 19:09:25):

прошивку в бин формате ещё можно получить выбрав в меню «импортировать файл бин» — он скопируется в папку с скетчем.
Пробовал этот вариант заливал в плату бин, но не заработало — ПОМОГЛО очистить еепром! СПАСИБО, ЧТО РАЗЖЕВАЛИ! прошился скетчем и без проблем стартанула точка доступа… Ещё вопрос созрел, а класс esp8266 самому создать? его нет и не появляется… может глупые вопросы, но я чайник тут

krepton85 (2019-01-23 19:22:11):

@ZAMCTB, да класс создавать самому, все должно быть так как на скринах у меня, буква в букву.

krepton85 (2019-01-23 19:24:27):

«прошивку в бин формате ещё можно получить выбрав в меню «импортировать файл бин» — он скопируется в папку с скетчем.» да тоже так делал, но так есть косяк, исчезает поддержка русских символов для mqtt, не знаю по чему так, но прошивка как то по др. компилируется.

@ZAMCTB (2019-01-28 16:06:20):

krepton85, всё как бы должно работать, но не работает, как проверить рабрту esp8266 — в терминале только при загрузке пишет пару строк и всё… может дам доступ в мой MajorDoMo — глянешь?! магарыч на карту переведу! https://t.me/ZAMCTB

krepton85 (2019-01-28 16:32:09):

@ZAMCTB, пока очень занет вечером гляну.

@ZAMCTB (2019-01-30 21:07:16):

krepton85, помог разобраться с моими попытками реализовать данную хотелку и весьма успешно… отчет из действий за кадром… 1- проверили подключился ли шлюз к MQTT — шлюз подписывается и ставит в топик «IR_remote/online» 1 каждые пару сек — если не заменяет ваш 0 то шлюз не достучался к mqtt. 2. опытным путём выявил не рабочий передатчик rf 433Mhz и заменил, так же выкинул один передатчик ir 3. и последнее у меня MDM MQTT стояло /# и шлюз забирал с топиков данные, но не ставил, я в скетче «IR_remote/ заменил на «/IR_remote/ автоматом в notepad++ вышло 41 замена и всё после этого заработало, но скорей всего просто нужно было «у меня MDM MQTT стояло /# » поставить просто # без слеша… PS свсё очень круто работает и потенциал у решения довольно не плохой т.к. шлюз мониторит эфир rf / ir и можно настроить логику на при приёме сигнала например с датчика движения и т.д. PS2 очень доволен, спасибо всем!

@ZAMCTB (2019-01-30 21:15:41):

Собрал шлюз WiFi + IR + rf 433Mhz из 5 компонентов с али за 5$ (минут 5 собирается) как альтернативу Broadlink сэкономил 30$ — если кому не деньги то просто удобней — имхо (собрано на плате wemos d1 mini на ней присутствует вся обвязка и остаётся лишь добавить приёмники и передатчики rf / ir )

krepton85 (2019-02-02 21:14:42):

У кого будут проблемы с повторным срабатыванием виртуальной кнопки для RF части, добавьте в скетч в раздел void setup() строчку:

mySwitch.setRepeatTransmit(5);//количество повторов отправки кода

по умолчанию в библиотеке RC Switch прописано 10 повторов отправки кода, если вообще не использовать эту функцию, по этому у некоторых радио-приемных устройств 1 клик по кнопке в MD может быть расценен как 2 нажатия кнопки.

yray (2019-02-19 01:11:20):

не соединяется с MQTT сервером, что может быть не так ?

krepton85 (2019-02-19 09:45:53):

yray, eeprom у esp8266 была чистая изначально?

@ZAMCTB (2019-02-20 00:27:22):

yray прочитай мою запись выше чуть… та же проблема была — может поможет…

yray (2019-02-20 23:59:26):

ESP8266 совершенно новая, eeprom чистая, ну на всякий зачистил бланком. подключены только светодиоды и фотоприемник, RF не подключен, после прошивки создает свою точку, вбиваю параметры Wi-Fi и mqtt, после перезагрузки подключается к роутеру с этим все хорошо, на прием ИК сигнала мигает светодиодом, но нет коннекта к MQTT, раскоментировал и подправил дебаг и вот что он посылает в порт:
MQTT SERVER : 192.168.0.1 -сервер указан правильно
MQTT port : 1883 — порт правильный
MQTT user : admin -имя и пароль правильные
MQTT pass : **
Connecting to MQTT server
Could not connect to MQTT server
и так далее

yray (2019-02-21 00:02:06):

Пароль у меня от wifi 30 символов, ну так надо, может он что-то переполняет в скетче ? и с отсутствие RF не должно же проблем быть ?

krepton85 (2019-02-21 08:25:02):

yray, точно не помню сколько на пароль wi fi выделил байт, но ssid 32 символа помню точно, посмотрю когда буду свободен.

krepton85 (2019-02-21 15:17:57):

Для wi fi пароля 64 символа можно, имя ssid 32 символа, для mqtt user 16 символов.

krepton85 (2019-02-21 15:22:28):

Mqtt pass — 16 символов.

yray (2019-02-21 20:49:25):

все укладывается в допуски

krepton85 (2019-02-21 21:10:41):

yray, ssid и pass от wi fi верно восстанавливается из eeprom? В сериал должеен выводит если раскоментировать в void setup.
Если с этим все норм, а к wi fi не подключается, попробуйте скомпелировать прошивку пакетом другой версии в arduino IDE. У меня точно не помню какая версия пакета, помнется что 2.2.2 или 2.2.3. Обязательно не забывайте удалить текущий пакет перед установкой др. версии!!!

yray (2019-02-21 21:26:07):

кто сказал что к wifi не подключается — с подключением к сети все отлично, нет подключения к MQTT

yray (2019-02-21 21:27:07):

просто раскоментировать не достаточно, там неправильно указанны названия переменных для вывода в сериал

yray (2019-02-21 21:28:43):

пакеты брал ваши по ссылкам, добавлял их в папку со скетчем таким образом скетч использует не мои библиотеки а ваши находящиеся с ним в одной папке

krepton85 (2019-02-21 21:35:56):

yray, кстати может у вас в брокере mqtt используется шифрование трафика, я никогда еще не проверял эту библиатеку pubsubclient подключаясь к зашифрованному серверу, но было бы интересно проверить.

yray (2019-02-21 21:47:59):

нет шифрования нет, множество различных устройств в домашней сети прекрасно общаются по MQTT в том числе и самоделки помоем с такой же библиотекой MQTT

krepton85 (2019-02-21 21:56:35):

Очень странно тогда, почему не подключается у вас, у меня все нормально, у др. тоже, у вас так же как и у меня пахоже брокер на openwrt роутаре запущен. (Кстати что там в логах со стороны брокера (роутера) пишет)?

yray (2019-02-21 22:00:09):

да брокер на роутере — zyxele там специфичная ос, фиг знает где там эти логи искать

krepton85 (2019-02-22 12:09:17):

yray, папробуйте накрайняк вручную, прямо в скетчь прописать параметры mqtt server, mqtt port — это в void setup; mqtt user, mqtt pass — это в void loop, вместо переменных.

yray (2019-02-22 22:51:53):

в общем заработало, проблема ушла когда логин и пароль прописал вручную в строчке .set_auth(mqtt_user, mqtt_pass)
вписал данные естественно в кавычках, если кто повторить решит.
в чем дело не знаю, авторизация на MQTT брокере у меня отключена, логин и пароль не обязательны и не проверяются, то есть не может быть дело в неверных данных авторизации, что-то другое что мешает работе библиотеки.

@ZAMCTB «IR_remote/ заменил на «/IR_remote/ автоматом в notepad++ вышло 41 замена и всё после этого заработало» — это делать не нужно, вы действительно зря подписались на топик со слешем.

yray (2019-02-22 22:57:13):

Выяснил что чистить флеш бланком или специальным скетчем сейчас уже не актуально, в среде ардуино сейчас есть пункт Erase Flash, по умолчанию выполняется только загрузка скетча, но если переключить то перед загрузкой скетча среда ардуино может сделать и очистку wi-fi и всего флеша целиком.

Еще вопрос для чего передается столько топиков — какие-то будильники макросы время, оно для чего-то нужно ?

krepton85 (2019-02-22 23:28:26):

Эти топики лишние для majordomo использовал их раньше для приложения Андроид.
Суть была такова, есть 4 пульта статично прописанных в скетчь и одна раскладка клавиатуры в приложении (на скринах все есть) можно выбрать любой пульт и управлять по mqtt без MD. Часы нужны были для 4-х будильников по дням недели, по будильникам выполнялись макросы — это последовательность нажатия на заранее выбранные кнопки в одном или разных из 4-х пультов. Макросы настраивались через это же приложение. Например мне было удобно по будильнику что бы включалась RGB led лампа в бра (эта лампа на 3 ватта продовалась вместе с ИК пультом).

krepton85 (2019-02-22 23:30:25):

Если есть желание то могу скинуть конфиг настроеек для этого приложения, дабы вам вручную не создовать все элементы управления?

qartz (2019-04-06 19:06:37):

здравствуйте. на схеме все верно? светодиоды 3 последовательно? их на сколько я знаю резистором ограничивают и всех в параллель ставят ? не? каковы параметры ИК диода ? они ж вроде как импульс до 1А поддерживают ?

krepton85 (2019-04-06 19:38:35):

qartz, мои там где покупал написано 1,3 вольта максимальный ток 100мА. По факту получилось 70мА при напряжении 1,5 вольта на светадиод. Пробовал и 2 и 1 и 3 светадиода последовательно в итоге, 2 — сгорают, 1 — тоже сгорает, 3 — само оптимально, 4 — слабый сигнал. В итоге запаял 2 цепочки по 3 последовательно. Размещенны на круглой банке вертикально по 3 шт, горизонтально 2 шт. За счет закругления в банке светадиоды направленны в разные стороны слегка, в 3 слоя , получается довольно мощный шлюз, ни один пульт не сравнится с мощностью этого шлюза. И да , важно применять полевой massfet транзистор, биполярные довольно быстро сгорают и большие потери мощности.

Strangeman (2019-04-06 20:23:08):

Ой ё…
Падение напряжения на инфракрасных светодиодах порядка 1В и ставить все параллельно нет смысла.
Включать их нужно с ограничительным резистором, тогда ничего не будет сгорать и будет стабильно работать. По 2 светодиода последовательно и токоограничивающий разистор — самое то для надежной работы и температурной стабильности.

krepton85 (2019-04-06 23:26:12):

yray, да видел, видел такое.
Сейчас добавил еще один шлюз на кухне в систему Majordomo, только там на esp-01 работает только ИК передатчик. И написал метод для последовательного нажатия комбинаций кнопок на разных пультах (для TV BBK, и приставки world wision t92a для старта iptv) здесь куча кнопок нужно нажать что бы включить iptv на приставке. :)
А так сейчас удобней, прежде чем идти на кухню тыкнул всего 1 кнопку (старт iptv) в меню Majordomo и пока идешь на кухню, система majordoma сама понажимает нужные кнопки и включит 1-ый канал из плейлиста. ;)

qartz (2019-04-07 10:43:16):

мне как раз пакет диодов приехал с китаю 940нМ, я тож склоняюсь к варианту гирлянды из 2 диодов и резюка Ом на 20-50 продублировав ее раз 5-6 и мосфетку поставить что нить типа IRLML2502 запитав всё от +3.3В

qartz (2019-04-07 10:47:12):

а кто во что упаковал изделие ? торчащие диоды ведь это не прям шедевр дизайна ? ик прозрачные пластики есть , ни кто не поделится идеей?

Lyova (2020-07-17 11:00:53):

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

ir

Регулярно обновляется 2 топика curent_time 17.июль.2020 —Пт— 10:59:17 и online 1 подскажите как ее завести?)

krepton85 (2020-07-17 11:17:37):

Ну в MJDM обычно если в топик ничего не прилетает, то этот топик сам не создастся, его нужно вручную прописать в MJDM.

Lyova (2020-07-17 12:14:48):

Добавил я все как на рисунке выше. Перепробывал все пульты которые были дома в топиках приемника и передатчика изменений нет. В ком порт устройство шлет логи работы ?

Lyova (2020-07-17 12:21:08):

А вижу, надо ункомент все //Serial.print Еще как вижу вроде надо в топике вырать тип пульта от 1 до 4 и тип передатчика ИР или РФ?

krepton85 (2020-07-17 12:34:00):

Выбирать ничего не нужно.
Тип пульта, да закодирован в моих текстовых сообщениях по MQTT в виде цифры, но эти строки автоматически формируются. Да возможно я не все кодировки ИК пультов добавил для распознования. Например наш новый ТВ «Томсан» не поддердивается этим шлюзом.
Все автоматом работает, и как RF шлюз, и одновременно IR шлюз. Причем было замечано что каким то волшебным образом шлюз может сам себе отпровлять и получать ИК коды.

Lehix (2020-10-19 18:24:01):

Приветствую!
Еле запустил шлюз… Не подключался к брокеру Mosquitto:
New connection from 192.168.1.54 on port 1883.
Client <unknown> disconnected due to protocol error.

и хоть ты что хочешь делай, я уже и трафик вайршарком снифал, и брокер менял — толку зеро. Оказался прав таки mr. yray надо прописать логин пароль непосредственно в скетч:
// .set_auth(mqtt_user, mqtt_pass)
.set_auth(«MQTT_usr», «123456»)

НЕ знаю почему так и как у всех работало… Пароли и шифрование не использую. А что самое смешное — логин пароль передавался в пакетах при не удачном подключении — видел в сетевом снифере. Прописал в тупую и пошло!

Lehix (2020-10-19 18:49:57):

Ув. krepton85 подскажите, пожалуйста, если я не использую часы, макросы и будильники, можно всё это дело вырезать без потери функциональности шлюза?
Хочу закоментировать все упоминания о макросах и будильниках, нет ли там важны системных макросов?

И ещё вопрос — как шлюз реагирует на пульты? Что я должен увидеть? Бо похоже у меня очередная проблема (:

Lehix (2020-10-29 18:39:40):

Лишнее вырезал, всё работает. Немного хромает направленность, — надо точно прицеливаться. Буду экспериментировать с диодами и рассеивателями…

IR диоды подключены без токоограничительного резистора. Это не правильно, у меня сгорели. При программировании, состояние выхода GPIO4 = «1», и на IR диоды валит все 5 вольт без ограничения тока. В импульсном режиме возможно и работало. Пришлось докостылить SMD на 68Ом

так же в скетче не понятно это:
const int RECV_PIN = 5; //an IR detector/demodulator is connected to GPIO pin1
и
int led_r = 5; // красный свето-диод — режим точки доступа, мигающий — нстройки ssid сохранены, ожидание перезагрузки пользоватилем
Похоже на ошибку — один вывод на два действия повешено?


Пожалуйста, войдите в систему, чтобы добавлять комментарии Присоединиться!

MQTT + Easy Web Config

Moderator: igrr

Wed Nov 02, 2016 3:36 am
#57536

Hello
great example and I also started reading your blog thank you.
I want to try this but i got an error. I tried with v1.9 and last version of pubsubclient. Do I need other libraries?

In file included from C:xxxDesktopMqttTimerMqttTimer.ino:39:0:
sketchglobals.h: In function ‘void ConnectMQTT()’:
globals.h:195: error: ‘MQTT’ has not been declared
while (!client.connect(MQTT::Connect(config.clientID).set_auth(config.MQTTuser, config.MQTTpass)) && retries—)
^
In file included from C:xxxDesktopMqttTimerMqttTimer.ino:40:0:
sketchMQTTHandler.h: At global scope:
MQTTHandler.h:7: error: ‘MQTT’ does not name a type
void callback(const MQTT::Publish& pub)
^
MQTTHandler.h:7: error: expected unqualified-id before ‘&’ token
void callback(const MQTT::Publish& pub)
^
MQTTHandler.h:7: error: expected ‘)’ before ‘&’ token
MQTTHandler.h:7: error: expected initializer before ‘pub’
void callback(const MQTT::Publish& pub)
^
exit status 1
‘MQTT’ has not been declared

Wed Nov 02, 2016 11:44 pm
#57571

Hi not sure why you’re getting errors like that?

Pubsubclient should be v1.9 also make sure you don’t change the order of the include libraries in the main
sketch.

Thu Nov 03, 2016 5:21 am
#57584

That was the next stage in my home automation project!

I needed the knowledge and implementation of MQTT and NTP to make some timer-controled devices.

Thanks man.

Wed Aug 23, 2017 7:14 pm
#69419

I have got the same errors pointed by Eren. Do you have any clue? I am using mqtt v 1.9 and arduino ide 1.68.

Вступление

Это несколько устаревшая статья, но она всё равно может быть полезной. Если вы новичок в программировании, рекомендую вам вначале ознакомиться с пошаговым руководством по созданию проекта телеметрии с помощью ESP8266 и MQTT.

В данной статье изложен процесс создания несложного устройства для телеметрии климатических параметров (или любых параметров) через интернет с помощью смартфона и (или) компьютера. Конкретно у меня это устройство располагается в гараже в загородном домике, измеряет температуру, влажность и давление воздуха на улице, в гараже и в погребе (две точки – внизу и вверху). То есть по сути это метеостанция с удаленным управлением. Кроме того, на устройство возложена задача по автоматическому либо удаленному управлению нагревателем. Для простоты изложения далее будем называть его “телеметром“, так как передает параметры удаленно и “много чего”. В качестве базы для создания телеметра я выбрал контроллер на базе ESP8266, так как у нее “на борту” уже имеется встроенный WiFi, а свободных портов на роутере для подключения кабелем у меня нет. Программировать мне проще всего в среде Arduino, так как имеется опыт работы с ней. Попробовал сделать скетч в LUA – у меня лично как-то “не зашло”, вернулся назад в Arduino IDE. Для чего эта статья? Сам я собирал это устройство в первый раз. Так что я, в принципе, новичок в этом деле. И потратил кучу времени пока нашел оптимальный для себя вариант. В примерах, которых полно в сети, не всегда есть то, что мне было нужно. Здесь же описано полностью готовое устройство, Вам останется только изменить параметры подключений для себя. Самая главная “трудность” при удаленном мониторинге параметров – это то, что и устройство телеметрии, и “устройство приема и управления” (смартфон) находятся “за NATом” и не могут “видеть” друг друга напрямую. Следовательно, нужен какой-то посредник, который будет принимать данные с телеметра и передавать их на смартфон и наоборот. Беглый поиск выдает множество ссылок на протокол MQTT и публичные облачные MQTT-брокеры, есть примеры и для Arduino IDE, поэтому вначале остановился на нем. Потом дополнительно добавил отправку данных на сервис ThinkSpeak, но об этом подробнее ниже.

Техническое задание

Итак, задачу ставим следующую:

  • Измеряем параметры в четырех точках: на улице, в гараже, в погребе под потолком и в погребе внизу (температура вверху и внизу может существенно отличаться). Сбором данных внутри дома займется другое устройство, “попутно” с выполнением другой задачи (постараюсь рассказать об этом с следующей статье). Разумеется Вы можете сделать столько датчиков, сколько нужно – лишь бы выводов на микроконтроллере хватило.
  • По нижнему датчику в погребе при опускании температуры ниже критической (плюс 2-3 градуса) включать подогрев (у меня для этого есть маломощный тепловентилятор 250Вт для уличных терминалов). Плюс можно включить и выключить подогрев принудительно.
  • Собранные данные публикуем на облачном MQTT-брокере cloudmqtt.com, после чего их можно просматривать с помощью мобильных приложений.
  • Обратное удаленное управление осуществляется также через этот же MQTT-брокер с помощью подписок на заранее определенные топики.
  • Дополнительно, для удобного накопления данных и просмотра их в виде графиков, добавлена публикация данных на сервере thingspeak.com

Забегая вперед – в итоге у меня получилось примерно вот такое устройство:

Готовое устройство

Необходимые комплектующие

Почти все комплектующие заказывал на AliExpress. Для создания устройства мне потребовались следующие модули (ссылки приведены примерные, можно поискать и более дешевые варианты, но нужно учитывать доставку):

  • Модуль на базе ESP8266, конкретно у меня это “nodemcu V3 Lua WI-FI” – $1,99 / ~137 руб.
  • Датчик BME280 ( для измерения давления + температуры + влажности на улице) – $2.34 / ~162 руб.
  • Три датчика DHT22/AM2302 (для измерения температуры и влажности в гараже и погребе) – 3 шт * $2.41 / ~166 руб.
  • Блок питания HLK-PM01 AC-DC 220V to 5V – $2.04 / ~141 руб. Можно использовать любой блок питания 5-8В, но “внутренний” на мой взгляд удобнее.
  • Модуль реле KY-019 5V – $0.62 / ~43 руб. Реле откровенно “слабое”, но на 250 Вт, думаю, “потянет”. Если нужно коммутировать более мощную нагрузку, то и реле нужно выбирать более серьезное.
  • Монтажная плата 7х9 см (для аккуратного монтажа) – $0.67 / ~46 руб.
  • Клеммы KF301-3P по $0.06 – 0.08 за шт., их понадобилось 7 шт., две по $0.06, пять по 0.08, всего $0.52 / ~36 руб.
  • Монтажная коробка в качестве корпуса, провод (купленные уже в местном магазине) примерно 100-200 руб.

Светодиод для индикации состояния устройства (у меня уже был готовый с проводом и разъемом). Резисторы для “подтяжки” тоже использовал из старых запасов, еще “советские”. Итого расходы на комплектующие примерно 1160 – 1300 рублей. Конечно, за эти деньги можно купить готовое устройство – портативную метеостанцию. Но оно вряд ли будет “уметь” собирать данные удаленно, и уж тем более не может управлять другими приборами. Кроме того, удовольствие от самостоятельного изготовления и программирования – бесценно! Какие датчики лучше использовать? Конечно, BME280 более точные и не занимают “лишних” выводов на плате контроллера (кроме, разумеется тех, что заняты шиной I2C – D1 и D2). Но датчики BME280 могут работать только по двум адресам шины I2C – 0x76 или 0x77, поэтому к одному контроллеру их можно подключить только две штуки, не более. Датчики DHT22 гораздо менее точные, часто “дохнут”, не “умеют” измерять давление, иногда стоят дороже, но их можно подключить столько, сколько свободных выводов на плате контроллера. В общем, если Вам нужно не более двух датчиков – берите BME280; если больше – то лучше всего два BME280 плюс DHT22. BMP280 покупать не стоит, он не “умеет” измерять влажность, а это в домашних условиях более “ценная” информация, чем давление. Хотя и стоит BMP280 сильно дешевле. Датчики можно применить и другие, более подробные сведения о датчиках можно прочитать в другой статье.

Настройка Arduino IDE

Для создания прошивки я использовал Arduino IDE. Вначале я попробовал сделать прошивку с помощью NodeMCU и LUA – скриптов, но у меня этот способ как-то не прижился, мне по душе больше Arduino пришлась. Для тех, у кого еще не установлена Arduino IDE необходимо выполнить следующие шаги:

  • Скачиваем установщик c официального сайта и устанавливаем его.
  • Подключаем поддержку плат на базе ESP8266 и устанавливаем драйвер для подключения платы к компьютеру. Как это сделать – подробно описано в этой статье.
  • В менеджере плат выбираем “NodeMCU 1.0” (чтобы относительно правильно “определились” номера ножек платы).

Выбор платы

Разумеется, если Вы будете использовать другой модуль, то и в Arduino IDE нужно выбрать другой… Далее, необходимо установить сторонние библиотеки, которые будут использованы в скетче. Нам понадобятся следующие библиотеки:

  • Adafruit_BME280 – для работы с датчиками BME280
  • DHTesp – для работы с датчиками DHT11, DHT22, AM2302 и подобными
  • Time – для работы с временем и NTP-серверами
  • PubSubClient (версии 1.99.1 от imroy) – для работы с MQTT-брокером

Библиотеки проще всего устанавливать через “менеджер библиотек”:

Установка библиотек

В фильтре менеджера библиотек вводим название библиотеки, затем выбираем версию (последнюю) и нажимаем “Установка”:

Установка библиотек

Дожидаемся завершения установки. Повторяем для всех библиотек, кроме PubSubClient. Но с PubSubClient такое не “прокатывает”. Дело в том, что в библиотеке опубликована новая версия, которая существенно отличается от той, что использована в подавляющем большинстве примеров, представленных в сети. Кроме того, в ней нет некоторых возможностей – например я не нашел как публиковать сообщения с заданным QoS. Да и судя по отзывам, работает она менее стабильно, чем версия от imroy. Поэтому нужную нам библиотеку придется установить вручную. Для этого скачиваем архив по адресу https://github.com/Imroy/pubsubclient, а затем распаковываем его в папку %ArduinoProjects%librariesPubSubClient, где %ArduinoProjects% – ваш каталог со скетчами, указанный в настройках Arduino IDE.

Электрическая схема

Схема устройства не представляет собой ничего сложного, все как описано в примерах подключения датчиков. В сенсоре BME280 подтягивающие резисторы уже напаяны на плате, а вот для DHT придется припаять их самому. Как и для светодиода. Клеммы на схеме не обозначены.

Схема сборки

Вначале я подключил реле на вывод платы D4, но в процессе написания скетча выяснилось, что на этом выводе работает встроенный светодиод, причем работает “наоборот” – когда реле включено, он гаснет, когда выключено – горит. Пришлось подключить реле на другой pin, благо свободные остались.  Светодиод “внешний” нужен для индикации режима работы:

  • не горит – устройство в режиме ожидания, WiFi подключен, MQTT в норме
  • горит непрерывно – идет сбор данных и отправка их на сервер
  • мигает медленно – не подключен к WiFi
  • мигает быстро – не подключен к серверу MQTT

Если выводом не хватает, можно внешний “внешний” светодиод подключить к D4, но в этом случае светодиод нужно подключить не к GND, а к VCC и изменить полярность его включения. В этом случае встроенный и внешний светодиоды будут работать синхронно. Собранное устройство:

Готовое устройство без корпуса

Здесь еще без блока питания, в процессе отладки. DHT22 еще едут из Китая, для отладки пришлось пользоваться DHT11. Датчик BME280 подключен четырехжильным телефонным кабелем длиной примерно 3 метра, работает без проблем.

Чтобы создаваемое устройство могло отправлять данные конечным “потребителям”, ему нужен “посредник” в интернете. Можно, конечно, создать на ESP микро-web-сервер и подключаться к нему напрямую через браузер. Но какое в этом удовольствие – ведь данные можно будет увидеть только в локальной сети, а мне требовался удаленный контроль, причем “за NAT-ом и 4G-модемом”. В случае MQTT таким посредником является MQTT-брокер. MQTT-брокер “принимает” данные от устройств, которые их публикуют, и рассылает клиентам, которые на них подписались. Предупреждение: на текущий момент на cloudmqtt.com больше нет бесплатных тарифов. С другими возможными серверами Вы можете ознакомиться в другой статье. Либо поднять свой личный MQTT сервер (на роутере Keenetic, например) и настроить мост на один из публичных. Для себя я выбрал сервис CloudMQTT.com. Просто потому, что в сети куча примеров как это сделать. На бесплатном тарифном плане “Cute Cat” сейчас можно подключать к каждому виртуальному экземпляру брокера (instance) до 5 клиентов одновременно (раньше было 10, судя по скриншотам в интернете). Количество топиков при этом не ограничено. Пять подключений – это много или мало? Ну вот у меня например: данное устройство в гараже – это раз. Второе будет стоять в доме и контролировать доступ в сеть, при необходимости перезагружать CPE210 с роутером и выполнять авторизацию через SMS – это два. Клиент для управления на смартфоне – это три. В принципе, достаточно. Но! Зашел посмотреть данные с компьютера – сразу появилось еще подключение. А если нужно смотреть данные не с одного телефона, а с нескольких? Или выводить данные на LCD-дисплей где-то еще – то пяти подключений не хватит однозначно. Впоследствии пришлось перенастроить устройства на другой облачный брокер, который не так удобен, но зато позволяет бесплатно подключать до 100 клиентов. Но для примера нам вполне достаточно и CloudMQTT.com. Итак, регистрируемся на сервисе CloudMQTT.com, подтверждаем учетную запись через письмо, которое придет к Вам на почту. Сразу после входа мы попадем в список “List all instances“, который сейчас пуст. Нажимаем зеленую кнопку “+ Create New Instance“, заполняем название экземпляра брокера, выбираем тарифный план и задаем метку. Метки ни на что не влияют, а служат только для группировки списка созданных экземпляров и упрощения навигации. После этого Вам будет предложено выбрать датацентр, где будет физически расположен Ваш виртуальный сервер. Для бесплатного плана их всего два: в США и в Европе, остальные не доступны: Подтверждаем выбор и… в общем-то все. Конфигурировать ничего не нужно – этот шаг доступен только на платных тарифных планах. Останется только подтвердить создание экземпляра. После подтверждения он появляется списке. Нажимаем на ссылку – название: Вот здесь на нужны имя сервера и порт подключения к нему (открытый или через SSL): Имя пользователя и пароль, которые указаны на этой странице лучше не использовать в скетче. Для “клиентов” создадим другого пользователя (а можно и не одного). Для этого нажимаем меню “USERS & ACL“, вводим желаемое имя пользователя и пароль, добавляем пользователя в список. Вот это имя и пароль мы и будем использовать в скетче в дальнейшем. А также и в мобильных клиентах на смартфоне при просмотре данных из экземпляра. Можно настроить разных пользователей для записи в топики с устройства и для чтения данных на смартфоне. Затем внизу страницы выбираем режим “Pattern” (сразу для всех пользователей) либо “Topic” (только для выбранного пользователя), указываем шаблон имен топиков, на которые нужно задать права доступа, выбираем собственно права (только чтение, только запись, либо и чтение и запись). Все, предварительные настройки выполнены.

Уже после написания и публикации статьи, CloudMQTT ввел дополнительные ограничения в бесплатных аккаунтах – теперь можно создавать не более 4 instances. Кому как, но мне этого очень мало. Пришлось искать другой публичный MQTT брокер. Пока что я пользуюсь mqtt.flespi.io брокером. Но и он ввел ограничение – вначале он допускал в бесплатном режиме подключение аж 100 устройств одновременно, но сейчас и там ограничение в 10 устройств. Увы, но придется либо платить, либо поднимать свой MQTT на каком-либо хостинге.

Структура топиков

Я использовал следующую структуру топиков:

  • site/device_id/sync_status – статус устройства (“0” – не активно, “1” – активно; при этом статус “0” публикует брокер с помощью will-сообщения).
  • site/device_id/settings/param_id – параметры устройства для удаленного управления
  • site/device_id/settings/param_id/subparam_id – параметры устройства для удаленного управления
  • site/device_id/sensor_id/value_id – публикуемые устройством значения сенсоров или состояния исполнительных устройств.

где:

  • site – местоположение устройства, например: “village” или “home”
  • device_id – идентификатор устройства, например “telemetr” или “garage”
  • param_id и subparam_id – идентификаторы параметров, публикуемых с устройства управления на конечное устройство
  • sensor_id – идентификатор сенсора, например: “outdoor” – уличный сенсор
  • value_id – идентификатор значения сенсора (BME и DHT считывают сразу по несколько значений – температуру, влажность и давление), например: “temp”, “humidity”…

Разумеется, структуру публикуемых топиков можно изменять.

Регистрация на сервере ThingSpeak

MQTT это конечно хорошо. Это просто и удобно. Но MQTT обладает одним небольшим недостатком – на MQTT брокере сообщения либо вообще не хранятся, либо хранится только последнее опубликованное сообщение (в случае, если оно retained). И если нам хочется посмотреть график изменения температуры в течение, скажем, суток, то придется все эти сутки держать запущенным клиент MQTT на смартфоне, а он любит кушать много энергии от батареи. А уж посмотреть данные за прошедшие сутки вообще нет никакой возможности. Но выход есть – можно параллельно отправлять данные на другой сервер – ThingSpeak, он будет накапливать Ваши данные и затем отображать их в виде графиков за любой период. Для работы с ThingSpeak не потребуется никаких дополнительных библиотек, он работает через REST API. 1. Переходим по адресу thingspeak.com. 2. Нажимаем кнопку “Get Started For Free”: 3. Указываем адрес электронной почты, выбираем страну: 4. Подтверждаем, что указанный адрес используется и для MatLab: 5. Дожидаемся письма на почту, подтверждаем учетную запись, нажимаем “Continue”: 6. Вводим имя профиля и придумываем пароль: 7. Регистрация завершена, можно создавать каналы. Каналов потребуется столько, сколько у нас датчиков, то есть как минимум четыре. Для создания канал нажмите “New Channel”: 8. Вводим название канала и список полей, в которые будут поступать данные. Можно использовать до 8 полей: 9. После сохранения канала попадаем в “приватный просмотр” данных канала, где и данных-то пока нет. Переходим во вкладку “API Keys”: 10. Здесь нам понадобится Write API Keyего нужно указать в скетче. Read API Key понадобится при настройке виджетов на смартфоне для отображения данных. Сохраним эти данные куда-нибудь. Повторяем шаги 7-10 пока не будет добавлено нужное количество каналов. В бесплатном режиме ThingSpeak сейчас допускает не более 4 каналов на аккаунт, но можно создать несколько аккаунтов. Для датчиков BME280 нужно будет указать дополнительные поля для хранения данных об атмосферном давлении. После того, как данные начнут поступать в каналы, их можно будет удобно просматривать либо на самом ThingSpeak, либо с помощью API на любом другом сайте: ravsoft2004.narod.ru

Программа / скетч

Общая логика работы скетча: 1. Пытается подключиться к WiFi в бесконечном цикле. Пока соединения с сетью нет – переключаем состояние светодиода и ждем некоторое время – получается мигание. Как только соединение с WiFi установлено – светодиод гасим. Если соединение вдруг пропало – вновь пытаемся подключиться и т.д. 2. Как только соединение установлено, запускаем синхронизацию “локального времени” с NTP-сервером. Точное время очень пригодится, а включать в схему еще и модуль часов при наличии интернета слишком расточительно. Будет вполне достаточно синхронизации с NTP-сервером один раз в пять-десять минут. 3. Затем подключаемся к MQTT-серверу и подписываемся на топики:

  • site/device_id/sync_status – сюда “управляющий” клиент MQTT публикует запросы синхронизации устройства (только для IoT MQTT Panel)
  • site/device_id/settings/+ – сюда “управляющий” клиент MQTT публикует параметры устройства
  • site/device_id/settings/+/+ – сюда “управляющий” клиент MQTT также публикует параметры устройства

Плюс в данном случае означает, что мы хотим получать сообщения с любым названием топика 4. Раз в пять-десять минут (интервал задается в настройках) собираем данные с датчиков, рассчитываем “ощущаемую температуру” и “точку росы”, а затем публикуем их на брокере. 5. Поскольку сервер ThingSpeak требует, чтобы публикация данных была не чаще, чем один раз в 15 секунд (а лучше 20), то кладем сообщения для ThingSpeak в “очередь”, из которой они постепенно публикуются каждые 20 секунд.

Скачать скетч:

Есть две верии скретча:

  1. Версия 4 – здесь весь код в одном файле ino. Если следующий показался сложноватым, то можно попробовать этот.
  2. Версия 5 – здесь весь “повторяющийся” код вынесен в отдельные библиотеки; добавлена очередь для публикации сообщений на ThinkSpeak; добавлена синхронизация времени с NTP; изменен алгоритм для подключения к WiFi; добавлена возможность корректировки показаний датчиков.

  Код снабжен комментариями, так что Вы сможете изменить его под свои потребности.

Прежде чем заливать скетч в ESP, его нужно настроить под Ваши параметры:

1. Изменить параметры WiFi сетей. В скетче предусмотрено подключение сразу к трем сетям. Сделано это для того, чтобы не перенастраивать каждый раз параметры WiFi – программа сама выберет нужную сеть.

const char*    wifi1_ssid          = "************";      // Имя WiFi сети 1
const char*    wifi1_pass          = "************";      // Пароль WiFi сети 1
const char*    wifi2_ssid          = "************";      // Имя WiFi сети 2
const char*    wifi2_pass          = "************";      // Пароль WiFi сети 2
const char*    wifi3_ssid          = "************";      // Имя WiFi сети 3
const char*    wifi3_pass          = "************";      // Пароль WiFi сети 4

2. Изменить параметры подключения к MQTT-брокеру:

const char*    mqttServer          = "mqtt.flespi.io";    // Имя сервера MQTT
const int      mqttPort            = 1883;                // Порт для подключения к серверу MQTT
const char*    mqttUser            = "*****************"; // Логин от сервера MQTT
const char*    mqttPass            = "";                  // Пароль от сервера MQTT

3. При желании изменить названия топиков MQTT:

const char*    mqttSite            = "village";           // Префикс топиков (местоположение)
const char*    mqttDeviceId        = "garage";            // Идентификатор клиента MQTT
const bool     mqttStartSlash      = false;               // Топики всегда начинать с "/"

const char*    mqttSensor1         = "outdoor";           // Улица
const char*    mqttSensor2         = "garage";            // Гараж 
const char*    mqttSensor3         = "cellar_up";         // Погреб 1
const char*    mqttSensor4         = "cellar_down";       // Погреб 2

const char*    nameSensor1         = "Дача: улица";       // Улица
const char*    nameSensor2         = "Дача: гараж";       // Гараж 
const char*    nameSensor3         = "Дача: погреб 1";    // Погреб 1
const char*    nameSensor4         = "Дача: погреб 2";    // Погреб 2

4. Изменить API ключи для каналов Thing Speak – указываем здесь Write API key:

const char* tkeySensor1 = "****************"; // Улица
const char* tkeySensor2 = "****************"; // Гараж
const char* tkeySensor3 = "****************"; // Погреб 1
const char* tkeySensor4 = "****************"; // Погреб 2

После этого можно заливать скетч в ESP и проверять работу. для отладки в Serail port идет подробный вывод того, что делается в текущий момент. Позже весь этот вывод можно закомментировать.

Для управления “умными” устройствами с мобильного телефона существует масса программ, каждый может выбрать себе “по вкусу”. Я попробовал несколько и остановился на IoT MQTT Panel, оно мне показалось самым функциональным и удобным. 1. Устанавливаем, нажимаем “+” для добавления подключения. Вводим параметры подключения к серверу MQTT, которые мы видели на странице “instance info”. В качестве Client ID указываем любое уникальное значение. В список Device list пока добавляем только название устройства – это будет название страницы, на которой расположены панели с датчиками. Затем нажимаем “Advanced options” и вводим имя пользователя и пароль для доступа к серверу MQTT – уже со станицы “USERS % ACL”. Если все введено правильно, программа соединится с сервером и пиктограмма облака станет красной:

2. “Проваливаемся” в соединение, видим пустой экран и пиктограмму соединения справа вверху. Прежде чем добавлять панели виджетов, лучше настроить только что созданное устройство. Для этого тапаем по значку “меню” в левом верхнем углу экрана и выбираем пункт “Device Configurations”. Здесь можно изменить цвет вкладки, пиктограмму, и самое главное – задать префикс топиков, чтобы не повторять одинаковое начало на каждой панели:

3. Теперь можно добавлять панели. Типов панелей программа предлагает достаточно много. Выбираем нужный тип, например для отображения температуры я выбрал “Vertical Meter”. Вводим параметры, учитывая префикс топиков, который мы указали на предыдущем этапе:

4. Сохраняем и проверяем результат. Разумеется, отображаться значение будет только после того, как придут данные от собранного устройства. Для каждого датчика и для каждого устройства придется добавить отдельные панели – виджеты, поначалу это довольно утомляет. Но процесс облегчается тем, что созданные панели можно клонировать. Полностью настроенное устройство можно опубликовать на том же брокере и затем легко перенести на другой смартфон. Наслаждаемся результатом:

Для удобства я разделил на две разных страницы в программе (которые называются здесь “device”) параметры и отображаемые данные.

Мобильный клиент ThinkSpeak

Для просмотра данных с ThinkSpeak можно использовать обычный браузер, а также существует множество программ для android.  Лично мне самым практичным показался “IoT ThingSpeak Monitor Widget“. Для его настройки потребуется номер канала и Read API key (если канал не публичный).

Это все, посмотреть текущие данные можно здесь.


Посмотрите другие статьи раздела “Домашняя автоматика & умный дом”…

Skip to main content

Forum for Electronics

Forum for Electronics

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals… and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

  • Hardware and PCB Design

  • Hobby Circuits and Small Projects Problems

You are using an out of date browser. It may not display this or other websites correctly.
You should upgrade or use an alternative browser.

4 channel iot controller sketches not compiling


  • Thread starter

    sribangaram


  • Start date

    Sep 11, 2018

Status
Not open for further replies.
  • #1

4 chanal iot controller sketch not compilling

Dear friends i start the project 4 relay controlling through internet
link : https://iot-playground.com/blog/2-uncategorised/92-esp8266-internet-connected-4-relay-switch#program

but this program is not compelling
error : ‘MQTT’ does not name a type

#include <ESP8266WiFi.h>
#include <MQTT.h>

#define AP_SSID     "xxx"
#define AP_PASSWORD "xxx"  

#define EIOTCLOUD_USERNAME "xxx"
#define EIOTCLOUD_PASSWORD "xxx"

// create MQTT object
#define EIOT_CLOUD_ADDRESS "cloud.iot-playground.com"

#define DO_TOPIC        "/Sensor.Parameter1"

#define PIN_DO_1         D0  // DO pin1 
#define MODULE_ID_1     1


#define PIN_DO_2         D1  // DO pin2 
#define MODULE_ID_2     2


#define PIN_DO_3         D2  // DO pin3 
#define MODULE_ID_3     3


#define PIN_DO_4         D3  // DO pin4 
#define MODULE_ID_4     4


MQTT myMqtt("", EIOT_CLOUD_ADDRESS, 1883);


void setup() {
  Serial.begin(115200);

  WiFi.mode(WIFI_STA);  
  WiFi.begin(AP_SSID, AP_PASSWORD);
 
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(AP_SSID);
    
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  };

  Serial.println("WiFi connected");
  Serial.println("Connecting to MQTT server");  

  //set client id
  // Generate client name based on MAC address and last 8 bits of microsecond counter
  String clientName;
  uint8_t mac[6];
  WiFi.macAddress(mac);
  clientName += macToStr(mac);
  clientName += "-";
  clientName += String(micros() & 0xff, 16);
  myMqtt.setClientId((char*) clientName.c_str());

  Serial.print("MQTT client id:");
  Serial.println(clientName);

  // setup callbacks
  myMqtt.onConnected(myConnectedCb);
  myMqtt.onDisconnected(myDisconnectedCb);
  myMqtt.onPublished(myPublishedCb);
  myMqtt.onData(myDataCb);
  
  //////Serial.println("connect mqtt...");
  myMqtt.setUserPwd(EIOTCLOUD_USERNAME, EIOTCLOUD_PASSWORD);  
  myMqtt.connect();

  delay(500);

  pinMode(PIN_DO_1, OUTPUT); 
  pinMode(PIN_DO_2, OUTPUT); 
  pinMode(PIN_DO_3, OUTPUT); 
  pinMode(PIN_DO_4, OUTPUT); 

  subscribe();
}

void loop() {
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
}


String macToStr(const uint8_t* mac)
{
  String result;
  for (int i = 0; i < 6; ++i) {
    result += String(mac[i], 16);
    if (i < 5)
      result += ':';
  }
  return result;
}


void subscribe()
{
    myMqtt.subscribe("/" + String(MODULE_ID_1) + DO_TOPIC); //DO 1
    myMqtt.subscribe("/" + String(MODULE_ID_2) + DO_TOPIC); //DO 2
    myMqtt.subscribe("/" + String(MODULE_ID_3) + DO_TOPIC); //DO 3
    myMqtt.subscribe("/" + String(MODULE_ID_4) + DO_TOPIC); //DO 4
}


void myConnectedCb() {
  Serial.println("connected to MQTT server");
  subscribe();
}

void myDisconnectedCb() {
  Serial.println("disconnected. try to reconnect...");
  delay(500);
  myMqtt.connect();
}

void myPublishedCb() {
  Serial.println("published.");
}

void myDataCb(String& topic, String& data) {  
  if (topic == String("/"+String(MODULE_ID_1)+ DO_TOPIC))
  {
    if (data == String("1"))
      digitalWrite(PIN_DO_1, HIGH);     
    else
      digitalWrite(PIN_DO_1, LOW);

    Serial.print("Do 1:");
    Serial.println(data);
  }


  if (topic == String("/"+String(MODULE_ID_2)+ DO_TOPIC))
  {
    if (data == String("1"))
      digitalWrite(PIN_DO_2, HIGH);     
    else
      digitalWrite(PIN_DO_2, LOW);

    Serial.print("Do 2:");
    Serial.println(data);
  }


  if (topic == String("/"+String(MODULE_ID_3)+ DO_TOPIC))
  {
    if (data == String("1"))
      digitalWrite(PIN_DO_3, HIGH);     
    else
      digitalWrite(PIN_DO_3, LOW);

    Serial.print("Do 3:");
    Serial.println(data);
  }

  if (topic == String("/"+String(MODULE_ID_4)+ DO_TOPIC))
  {
    if (data == String("1"))
      digitalWrite(PIN_DO_4, HIGH);     
    else
      digitalWrite(PIN_DO_4, LOW);

    Serial.print("Do 4:");
    Serial.println(data);
  }
  
}

Please tell me ware i am mistake

  • #2

Re: 4 chanal iot controller sketch not compilling

Do you really have these MQTT.h and MQTT.c files at the folder where your Arduino code is ? Perhaps not the case, but whenever I add files to the project folder, I do this by using #include «FILE» instead of #include <FILE>

  • #3

Re: 4 chanal iot controller sketch not compilling

Yes friend i have to added MQTT library files but i dont know that files are correct or wrong i am attaching that library file pls once check your end

Attachments

  • #4

Re: 4 chanal iot controller sketch not compilling

It do not seem the correct usage on your code.
Why don’t you have a look at the examples on the attached file ?

There, at a random example, it is being declared the type:

instead the way as you did:

MQTT myMqtt("", EIOT_CLOUD_ADDRESS, 1883);

  • #5

Re: 4 chanal iot controller sketch not compilling

OK got it thanks to your reply But how i will change the code like that please explain to me

  • #6

Re: 4 chanal iot controller sketch not compilling

how i will change the code like that please explain to me

The initial question was answered; now you expect someone to make the necessary modifications to change your program to work with the correct library…are you serious?

  • #7

Re: 4 chanal iot controller sketch not compilling

Friend i am not getting correct library please atleest provide the correct library files Please excuse me my poor english

— — — Updated — — —

Friend i am not getting correct library please atleest provide the correct library files Please excuse me my poor english

  • #8

Re: 4 chanal iot controller sketch not compilling

i am not getting correct library please atleest provide the correct library files

You have the correct library and associated examples, all within the above compressed file.
What else do you need to start making your own experiments ?

  • #9

Re: 4 chanal iot controller sketch not compilling

Friend i am try to lode this files for arduino library but it says this is not library files this files i am getting from GitHub

Attachments

  • #10

Re: 4 chanal iot controller sketch not compilling

friend iam getting error like this

Specified folder/zip file does not contain a valid library

  • #11

Re: 4 chanal iot controller sketch not compilling

Hi,

Read about «.zip» format.

It is a packed file. There are many real files within this zip file. You need to «extract» the real files first.

Klaus

  • #12

Re: 4 chanal iot controller sketch not compilling

Friend thanks to your reply I have to done like that after then also I am getting same error
‘MQTT’ does not name a type

  • #13

Re: 4 chanal iot controller sketch not compilling

I am getting same error
‘MQTT’ does not name a type

Did you even read the post #4 above ?
As said, the ‘MQTT’ does not name a type

Status
Not open for further replies.

Similar threads

  • Hardware and PCB Design

  • Hobby Circuits and Small Projects Problems

  • This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.

Lets kickoff with a demo video!

And the code as always

(ESP8266 with Arduino)

#include <ESP8266WiFi.h>
#include <PubSubClient.h>


// #define PWMRANGE 255
// #define PWM_VALUE 31
//int gamma_table[PWM_VALUE+1] = {
// 0, 1, 2, 2, 2, 3, 3, 4, 5, 6, 7, 8, 10, 11, 13, 16, 19, 23,
// 27, 32, 38, 45, 54, 64, 76, 91, 108, 128, 152, 181, 215, 255
//};
 
 #define PWM_VALUE 63
//int gamma_table[PWM_VALUE+1] = {
// 0, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 4, 4, 5, 5, 6, 6, 7, 8, 9, 10,
// 11, 12, 13, 15, 17, 19, 21, 23, 26, 29, 32, 36, 40, 44, 49, 55,
// 61, 68, 76, 85, 94, 105, 117, 131, 146, 162, 181, 202, 225, 250,
// 279, 311, 346, 386, 430, 479, 534, 595, 663, 739, 824, 918, 1023
//};

int gamma_table[PWM_VALUE+1] = {
 0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 8, 9, 10,
 11, 12, 13, 15, 17, 19, 21, 23, 26, 29, 32, 36, 40, 44, 49, 55,
 61, 68, 76, 85, 94, 105, 117, 131, 146, 162, 181, 202, 225, 250,
 279, 311, 346, 386, 430, 479, 534, 595, 663, 739, 824, 918, 1023
};



// RGB FET
#define redPIN 12
#define greenPIN 14
#define bluePIN 16


// W FET
#define w1PIN 13

// note 
// TX GPIO2 @Serial (Serial ONE)
// RX GPIO3 @Serial 

const char *ssid = "openhardwarecoza"; // your network SSID (name)
const char *pass = "novell1234"; // your network password


// Update these with values suitable for your network.
IPAddress server(192, 168, 1, 200);

void callback(const MQTT::Publish& pub) {
 Serial.print(pub.topic());
 Serial.print(" => ");
 Serial.println(pub.payload_string());
 
 String payload = pub.payload_string();

if(String(pub.topic()) == "/openHAB/RGB_2/Color"){
 int c1 = payload.indexOf(';');
 int c2 = payload.indexOf(';',c1+1);
 
 int red = map(payload.toInt(),0,100,0,PWM_VALUE);
 red = constrain(red,0,PWM_VALUE);
 int green = map(payload.substring(c1+1,c2).toInt(),0,100,0,PWM_VALUE);
 green = constrain(green, 0, PWM_VALUE);
 int blue = map(payload.substring(c2+1).toInt(),0,100,0,PWM_VALUE);
 blue = constrain(blue,0,PWM_VALUE);
 
 red = gamma_table[red];
 green = gamma_table[green];
 blue = gamma_table[blue];
 
 
 analogWrite(redPIN, red);
 analogWrite(greenPIN, green);
 analogWrite(bluePIN, blue);

// Serial.println(red);
// Serial.println(green);
// Serial.println(blue);
 }
 else if(String(pub.topic()) == "/openHAB/RGB_2/SW1"){
 int value = map(payload.toInt(),0,100,0,PWM_VALUE);
 value = constrain(value,0,PWM_VALUE);
 value = gamma_table[value];
 analogWrite(w1PIN, value);
 //Serial.println(value);
 }
 
}

PubSubClient client(server);

void setup()
{
 
 pinMode(redPIN, OUTPUT);
 pinMode(greenPIN, OUTPUT);
 pinMode(bluePIN, OUTPUT);
 pinMode(w1PIN, OUTPUT);
 
 // Setup console
 Serial.begin(115200);
 delay(10);
 Serial.println();
 Serial.println();

 client.set_callback(callback);

 WiFi.begin(ssid, pass);


 
 while (WiFi.status() != WL_CONNECTED) {

 
 delay(500);
 Serial.print(".");
 
 }
 
 Serial.println("");
 
 Serial.println("WiFi connected");
 Serial.println("IP address: ");
 Serial.println(WiFi.localIP());
 
 
 if (client.connect("WiFi_RGB_2")) {
 client.subscribe("/openHAB/RGB_2/Color");
 client.subscribe("/openHAB/RGB_2/SW1");
 Serial.println("MQTT connected"); 
 }

 Serial.println("");
}


void loop()
{
 client.loop();
}

In your Items configuration, add the following

// WiFi RGB 2
Group WIFI_RGB_2 "WiFi RGB 2" (All)
Color fWIFI_RGB_2 "RGB" <slider> (WIFI_RGB_2)
String WIFI_RGB_2_RGB (WIFI_RGB_2) {mqtt=">[broker:/openHAB/RGB_2/Color:command:*:default]"}
Switch WIFI_RGB_2_Switch1 "W1" (WIFI_RGB_2) {mqtt=">[broker:/openHAB/RGB_2/SW1:command:ON:100],>[broker:/openHAB/RGB_2/SW1:command:OFF:0]"}

New to what we’ve done so far, we need to add a Rule as well into a new file under /opt/openhab/configuration/rules/dolphin.rules for example.

This rule takes the inputs from the Item above and transforms it into RGB values to send over MQTT

import org.openhab.core.library.types.*

var HSBType hsbValue
var int redValue
var int greenValue
var int blueValue
var String RGBvalues

rule "Set RGB 2 value"
 when
 Item fWIFI_RGB_2 changed
 then
 hsbValue = fWIFI_RGB_2.state as HSBType

 redValue = hsbValue.red.intValue
 greenValue = hsbValue.green.intValue
 blueValue = hsbValue.blue.intValue


 RGBvalues= redValue.toString + ";" + greenValue.toString + ";" + blueValue.toString
 sendCommand( WIFI_RGB_2_RGB, RGBvalues )

 logInfo( "fWIFI_RGB_2", RGBvalues )
end

Finally, add the new item to your sitemap:

Frame label="RGB" {
Colorpicker item=fWIFI_RGB_2 icon="slider"
Switch item=WIFI_RGB_2_Switch1 label="Ch4"
}

rgb

Note: Based off code written by Andreas Holldorfer (http://chaozlabs.blogspot.co.za/2015/08/esp8266-in-wild-wifi-led-controller-hack.html) but adapted to my own PCBs

  • Voicemod ошибка настройки аудиоустройства
  • Voice install could not be verified ошибка
  • Vngame exe ошибка приложения rising storm 2 vietnam
  • Vmx86 sys vmware ошибка
  • Vmware ошибка при запуске приложения 0xc000007b