Люди добрые помогите с кодом Arduino

Если вы только начинаете осваивать систему MajorDoMo и чего-то не знаете или не можете понять, то задавайте свои вопросы в этой ветке.

Модератор: immortal

Ответить
Step
Сообщения: 14
Зарегистрирован: Вт янв 28, 2020 6:44 pm
Благодарил (а): 2 раза
Поблагодарили: 0

Люди добрые помогите с кодом Arduino

Сообщение Step » Сб фев 08, 2020 12:55 pm

Пытаюсь собрать и подключить измерения температуры первого и второго этожа в Aduino новичёк собрал из 2-двух кодов вод такой код не знаю правильно ли нет ? Но выходит одна ошибка а может и не одна не могу победить!

Код: Выделить всё

#include <SPI.h>                 // Библиотека SPI шины
#include <Ethernet.h>            // Ethernet библиотека
#include <PubSubClient.h>        // Библиотека MQTT
#include <DHT.h> 
DHT dht2(3, DHT11);
DHT dht1(5, DHT11);

// Задаём mac и ip адреса в Локальной сети
byte mac[]    = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED };
IPAddress ip{192, 168, 10, 15};      //ip Адрес Ethernet Shild'a Arduino
IPAddress server{192, 168, 10, 13};  //ip Адрес для MQTT Брокера

// Шапка Функции Callback (обратный вызов)
void callback(char* topic, byte* payload, unsigned int length);

EthernetClient ethClient;                                 //Инициализируем Ethernet клиент
PubSubClient client(server, 1883, callback, ethClient);   //Инициализируем MQTT клиент


// Функция Callback
void callback(char* topic, byte* payload, unsigned int length)
{
  // Выделяем необходимое кол-во памяти для копии payload
  byte* p = (byte*)malloc(length);
  // Копирование payload в новый буфер
  memcpy(p, payload, length);
  client.publish("home/data/status/sensor", p, length);
  // Освобождаем память
  free(p);
{
 // 1 бод равно 0.8 бит/сек
  // 1 бит/сек равно 1.25 бод
  Serial.begin(9600);             // Задаём скорость порта в БОД'ах.
  Serial.println("DHT11 test!");  // Тестовое сообщ. при откр. Монитора порта

  dht1.begin();
  dht2.begin();
  
  Ethernet.begin(mac, ip);        // Инициализируем mac, ip
}

void loop()
{
  int h = dht1.readHumidity();     // Переменная типа int для Влажности
  int t = dht1.readTemperature();  // Переменная типа int для Температуры
  int h1 = dht2.readHumidity();     // Переменная типа int для Влажности
  int t1 = dht2.readTemperature();  // Переменная типа int для Температуры

  // Преобразуем переменные для отправки в MQTT в Брокер
  static char char_temp[10];      // Переменная для перевода из int в char
  dtostrf(t, 3, 0, char_temp);    // Перевод из int в char

  static char char_hum[10];
  dtostrf(h, 3, 0, char_hum);
  
  // Преобразуем переменные для отправки в MQTT в Брокер
  static char char_temp[10];      // Переменная для перевода из int в char
  dtostrf(t1, 3, 0, char_temp1);    // Перевод из int в char

  static char char_hum[10];
  dtostrf(h1, 3, 0, char_hum1);

  if (isnan(t) || isnan(h))
  if (isnan(t1) || isnan(h1))     // Проверка удачно ли прошло считывание с DHT22
  {
    Serial.println("Failed to read from DHT11");  // Не удалось прочитать DHT22
  }
  else
  {
    Serial.print("Humidity: ");
    Serial.print(h);
    Serial.print(" %\t");
    Serial.print("Temperature: ");
    Serial.print(t);
    Serial.println(" *C");
  }

  if (client.connect("DHTClient"))
  {
    //Отправка данных по MQTT в Брокер
    client.publish("home/data/status/sensor/temp", char_temp); //отправляем в Брокер значения
    client.publish("home/data/status/sensor/hum", char_hum);
    client.publish("home/data/status/sensor/temp", char_temp1); //отправляем в Брокер значения
    client.publish("home/data/status/sensor/hum", char_hum1);
    client.subscribe("inhome/data/status/sensor/#");       // (тестовая) для отпр. данных в MajorDoMo вручную
    delay(3000);              // Отправка данных в Брокер раз в 5 секунд

    client.disconnect();      // Отключиться
  }
}
Ошибка

Код: Выделить всё

C:\Users\zamas\Documents\Arduino\mqtt\mqtt.ino: In function 'void callback(char*, byte*, unsigned int)':

mqtt:43:1: error: a function-definition is not allowed here before '{' token

 {

 ^

mqtt:90:1: error: expected '}' at end of input

 }

 ^

Несколько библиотек найдено для "Ethernet.h"
 Используется: C:\Users\zamas\Documents\Arduino\libraries\Ethernet
Не используется: C:\Program
Несколько библиотек найдено для "PubSubClient.h"
 Используется: C:\Users\zamas\Documents\Arduino\libraries\PubSubClient
Несколько библиотек найдено для "DHT.h"
 Используется: C:\Users\zamas\Documents\Arduino\libraries\DHT_sensor_library
Не используется: C:\Users\zamas\Documents\Arduino\libraries\Grove_Temperature_And_Humidity_Sensor
Несколько библиотек найдено для "Adafruit_Sensor.h"
 Используется: C:\Users\zamas\Documents\Arduino\libraries\Adafruit_Unified_Sensor
Несколько библиотек найдено для "SPI.h"
 Используется: C:\Program
exit status 1
a function-definition is not allowed here before '{' token
Screenshot_1.png
Screenshot_1.png (50.25 КБ) 379 просмотров
Step
Сообщения: 14
Зарегистрирован: Вт янв 28, 2020 6:44 pm
Благодарил (а): 2 раза
Поблагодарили: 0

Re: Люди добрые помогите с кодом Arduino

Сообщение Step » Сб фев 08, 2020 2:15 pm

Делал по этому году он проходит проверку

Код: Выделить всё

#include <SPI.h>                 // Библиотека SPI шины
#include <Ethernet.h>            // Ethernet библиотека
#include <PubSubClient.h>        // Библиотека MQTT
#include <DHT.h>                 // Библиотека для датчиков DHT11/22

#define DHTPIN 3
#define DHTPIN 5                 // Номер пина, к которому подсоединен датчик
#define DHTTYPE DHT11            // Задаём тип DHT датчика
DHT dht(DHTPIN, DHTTYPE);

// Задаём mac и ip адреса в Локальной сети
byte mac[]    = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED };
IPAddress ip{192, 168, 10, 15};      //ip Адрес Ethernet Shild'a Arduino
IPAddress server{192, 168, 10, 13};  //ip Адрес для MQTT Брокера

// Шапка Функции Callback (обратный вызов)
void callback(char* topic, byte* payload, unsigned int length);

EthernetClient ethClient;                                 //Инициализируем Ethernet клиент
PubSubClient client(server, 1883, callback, ethClient);   //Инициализируем MQTT клиент


// Функция Callback
void callback(char* topic, byte* payload, unsigned int length)
{
  // Выделяем необходимое кол-во памяти для копии payload
  byte* p = (byte*)malloc(length);
  // Копирование payload в новый буфер
  memcpy(p, payload, length);
  client.publish("home/data/status/sensor", p, length);
  // Освобождаем память
  free(p);
}


void setup()
{
  // 1 бод равно 0.8 бит/сек
  // 1 бит/сек равно 1.25 бод
  Serial.begin(9600);             // Задаём скорость порта в БОД'ах.
  Serial.println("DHT11 test!");  // Тестовое сообщ. при откр. Монитора порта

  dht.begin();

  Ethernet.begin(mac, ip);        // Инициализируем mac, ip
}


void loop()
{
  int h = dht.readHumidity();     // Переменная типа int для Влажности
  int t = dht.readTemperature();  // Переменная типа int для Температуры


  // Преобразуем переменные для отправки в MQTT в Брокер
  static char char_temp[10];      // Переменная для перевода из int в char
  dtostrf(t, 3, 0, char_temp);    // Перевод из int в char

  static char char_hum[10];
  dtostrf(h, 3, 0, char_hum);


  if (isnan(t) || isnan(h))     // Проверка удачно ли прошло считывание с DHT22
  {
    Serial.println("Failed to read from DHT11");  // Не удалось прочитать DHT22
  }
  else
  {
    Serial.print("Humidity: ");
    Serial.print(h);
    Serial.print(" %\t");
    Serial.print("Temperature: ");
    Serial.print(t);
    Serial.println(" *C");
  }

  if (client.connect("DHTClient"))
  {
    //Отправка данных по MQTT в Брокер
    client.publish("home/data/status/sensor/temp", char_temp); //отправляем в Брокер значения
    client.publish("home/data/status/sensor/hum", char_hum);
    client.subscribe("inhome/data/status/sensor/#");       // (тестовая) для отпр. данных в MajorDoMo вручную
    delay(3000);              // Отправка данных в Брокер раз в 5 секунд

    client.disconnect();      // Отключиться
  }
}
homester
Сообщения: 30
Зарегистрирован: Вт дек 24, 2019 2:09 pm
Благодарил (а): 15 раз
Поблагодарили: 5 раз

Re: Люди добрые помогите с кодом Arduino

Сообщение homester » Сб фев 08, 2020 3:01 pm

Вот рабочий код. В файле wifi.h подставь свои данные wifi. Если надо, вышлю библиотеки
Вложения
Temp.zip
(2.05 КБ) 39 скачиваний
За это сообщение автора homester поблагодарил:
Step (Сб фев 08, 2020 3:16 pm)
Рейтинг: 1.25%
Step
Сообщения: 14
Зарегистрирован: Вт янв 28, 2020 6:44 pm
Благодарил (а): 2 раза
Поблагодарили: 0

Re: Люди добрые помогите с кодом Arduino DHT11 на 2 датчика

Сообщение Step » Сб фев 08, 2020 3:10 pm

Я решил методом тыканя полностю рабочи в MD показывает теперю

Код: Выделить всё

#include <SPI.h>                 // Библиотека SPI шины
#include <Ethernet.h>            // Ethernet библиотека
#include <PubSubClient.h>        // Библиотека MQTT
#include <DHT.h> 

//#define DHTPIN 3
//#define DHTPIN 5                 // Номер пина, к которому подсоединен датчик
#define DHTTYPE DHT11            // Задаём тип DHT датчика
//DHT dht1(DHTPIN, DHTTYPE);
//DHT dht2(DHTPIN, DHTTYPE);

DHT dht1(3, DHT11);
DHT dht2(5, DHT11);

// Задаём mac и ip адреса в Локальной сети
byte mac[]    = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED };
IPAddress ip{192, 168, 10, 15};      //ip Адрес Ethernet Shild'a Arduino
IPAddress server{192, 168, 10, 13};  //ip Адрес для MQTT Брокера

// Шапка Функции Callback (обратный вызов)
void callback(char* topic, byte* payload, unsigned int length);

EthernetClient ethClient;                                 //Инициализируем Ethernet клиент
PubSubClient client(server, 1883, callback, ethClient);   //Инициализируем MQTT клиент

// Функция Callback
void callback(char* topic, byte* payload, unsigned int length)
{
  // Выделяем необходимое кол-во памяти для копии payload
  byte* p = (byte*)malloc(length);
  // Копирование payload в новый буфер
  memcpy(p, payload, length);
  client.publish("home/data/status/sensor", p, length);
  // Освобождаем память
  free(p);
}

// Функция Callback
void callback1(char* topic, byte* payload, unsigned int length)
{
  // Выделяем необходимое кол-во памяти для копии payload
  byte* p = (byte*)malloc(length);
  // Копирование payload в новый буфер
  memcpy(p, payload, length);
  client.publish("home/data/status/sensor1", p, length);
  // Освобождаем память
  free(p);
}
 
 void setup()
{
  // 1 бод равно 0.8 бит/сек
  // 1 бит/сек равно 1.25 бод
  Serial.begin(9600);             // Задаём скорость порта в БОД'ах.
  Serial.println("DHT11 test!");  // Тестовое сообщ. при откр. Монитора порта

  dht1.begin();
  dht2.begin();
  
  Ethernet.begin(mac, ip);        // Инициализируем mac, ip
}

void loop()
{
  
  int h = dht1.readHumidity();     // Переменная типа int для Влажности
  int t = dht1.readTemperature();  // Переменная типа int для Температуры
  int h1 = dht2.readHumidity();     // Переменная типа int для Влажности
  int t1 = dht2.readTemperature();  // Переменная типа int для Температуры

  // Преобразуем переменные для отправки в MQTT в Брокер
  static char char_temp[10];      // Переменная для перевода из int в char
  dtostrf(t, 3, 0, char_temp);    // Перевод из int в char

  static char char_hum[10];
  dtostrf(h, 3, 0, char_hum);
  
  // Преобразуем переменные для отправки в MQTT в Брокер
  static char char_temp1[10];      // Переменная для перевода из int в char
  dtostrf(t1, 3, 0, char_temp1);    // Перевод из int в char

  static char char_hum1[10];
  dtostrf(h1, 3, 0, char_hum1);

  if (isnan(t) || isnan(h))
  if (isnan(t1) || isnan(h1))     // Проверка удачно ли прошло считывание с DHT22
  {
    Serial.println("Failed to read from DHT11");  // Не удалось прочитать DHT22
  }
  else
  {
    Serial.print("Humidity: ");
    Serial.print(h);
    Serial.print(" %\t");
    Serial.print("Temperature: ");
    Serial.print(t);
    Serial.println(" *C");
  }
  {
   Serial.print("Humidity: ");
    Serial.print(h1);
    Serial.print(" %\t");
    Serial.print("Temperature: ");
    Serial.print(t1);
    Serial.println(" *C"); 
  }
  if (client.connect("DHTClient"))
  {
    //Отправка данных по MQTT в Брокер
    client.publish("home/data/status/sensor/temp", char_temp); //отправляем в Брокер значения
    client.publish("home/data/status/sensor/hum", char_hum);
    client.publish("home/data/status/sensor1/temp", char_temp1); //отправляем в Брокер значения
    client.publish("home/data/status/sensor1/hum", char_hum1);
    client.subscribe("inhome/data/status/sensor/#");       // (тестовая) для отпр. данных в MajorDoMo вручную
    delay(3000);              // Отправка данных в Брокер раз в 5 секунд

    client.disconnect();      // Отключиться
  }
}
Yashalta
Сообщения: 269
Зарегистрирован: Вс май 20, 2018 9:27 am
Благодарил (а): 127 раз
Поблагодарили: 16 раз

Re: Люди добрые помогите с кодом Arduino

Сообщение Yashalta » Вс фев 09, 2020 8:46 pm

homester писал(а):
Сб фев 08, 2020 3:01 pm
Вот рабочий код. В файле wifi.h подставь свои данные wifi. Если надо, вышлю библиотеки
Поделитесь пожалуйста библиотеками, а так же вопрос, под какой версией Arduino.ide это нужно будет прошивать?
homester
Сообщения: 30
Зарегистрирован: Вт дек 24, 2019 2:09 pm
Благодарил (а): 15 раз
Поблагодарили: 5 раз

Re: Люди добрые помогите с кодом Arduino

Сообщение homester » Пн фев 10, 2020 12:25 am

Yashalta писал(а):
Вс фев 09, 2020 8:46 pm
homester писал(а):
Сб фев 08, 2020 3:01 pm
Вот рабочий код. В файле wifi.h подставь свои данные wifi. Если надо, вышлю библиотеки
Поделитесь пожалуйста библиотеками, а так же вопрос, под какой версией Arduino.ide это нужно будет прошивать?
Библиотеку на ESP8266WIFI лучше установить из Arduino.ide (я пользуюсь 1.8.11 и 10 версией).
Остальные вот...
Вложения
libraries.zip
(55.24 КБ) 28 скачиваний
За это сообщение автора homester поблагодарил:
Yashalta (Пн фев 10, 2020 10:44 pm)
Рейтинг: 1.25%
Ответить