https://www.youtube.com/watch?v=CjG0JXCGye0
вот в примере тип рассказывает
if(payload[0] == '1'){
digitalWrite(rele2Pin, HIGH);
client.publish("outTopic", HIGH); }
if (payload[0] == '0'){
digitalWrite(rele2Pin, LOW);
client.publish("outTopic", LOW);
почему publish("outTopic" , если я должен ловить subscribe подписки - ниче не понимаю ((((
помогите разобраться с включением реле через умный дом.
сам умный дом отправляет нажатия на кнопку на сцене
1490949434: MajorDoMo MQTT Cycle 0 #
1490949434: Sending SUBACK to MajorDoMo MQTT Cycle
1490949434: New connection from 127.0.0.1 on port 1883.
1490949434: New client connected from 127.0.0.1 as MajorDoMo MQTT Client (c1, k10).
1490949434: Sending CONNACK to MajorDoMo MQTT Client (0, 0)
1490949434: Received PUBLISH from MajorDoMo MQTT Client (d0, q0, r0, m0, 'home/data/status/rele', ... (1 bytes))
1490949434: Sending PUBLISH to DallasTemperature (d0, q0, r0, m0, 'home/data/status/rele', ... (1 bytes))
1490949434: Sending PUBLISH to MajorDoMo MQTT Cycle (d0, q0, r0, m0, 'home/data/status/rele', ... (1 bytes))
1490949434: Received DISCONNECT from MajorDoMo MQTT Client
меге фиолетово.
вот код. пробовал менять публикацию на подписку. реле не слушается. как должно быть? и да, код переделывал с датчика со влажностью.
#include <SPI.h> // Ethernet shield
#include <Ethernet.h> // Ethernet shield
#include <PubSubClient.h>
#include <LiquidCrystal_I2C.h> //Dodanie bibliotek
#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
LiquidCrystal_I2C lcd(0x27,16,2); //Kod konwertera I2C
//DeviceAddress Temp1 = {0x28, 0x7D, 0xAD, 0x08, 0x00, 0x00, 0x80, 0x83};
//DeviceAddress Temp2 = {0x28, 0x47, 0xA7, 0x08, 0x00, 0x00, 0x80, 0x1C};
int flamePin = 3;
int rele1Pin = 4;
int rele2Pin = 5;
byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x00 };
IPAddress ip(10, 3, 1, 194); //IP Клиента (Arduino)
IPAddress server(10, 3, 1, 155); //IP Брокера
EthernetClient ethClient;
PubSubClient client(ethClient);
// Callback function header
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
for (int i=0;i<length;i++) {
Serial.print((char)payload
);
}
Serial.println();
if(payload[0] == '1'){
digitalWrite(rele2Pin, HIGH);
client.publish("home/data/status/rele", HIGH); }
if (payload[0] == '0'){
digitalWrite(rele2Pin, LOW);
client.publish("home/data/status/rele", LOW);
}
}
//EthernetClient ethClient;
//PubSubClient client(ethClient);
void setup() {
lcd.init();
lcd.backlight();
lcd.setBacklight(HIGH); //Właczenie podświetlenia
sensors.begin();
pinMode( flamePin, INPUT );
pinMode( rele1Pin, OUTPUT );
pinMode( rele2Pin, OUTPUT );
Serial.begin(57600);
client.setServer(server, 1883);
client.setCallback(callback);
Ethernet.begin(mac, ip);
// Allow the hardware to sort itself out
delay(1500);
}
void loop() {
sensors.requestTemperatures();
lcd.setCursor(0,0); //Ustawienie kursora
lcd.print("T1"); //Dodanie treści
lcd.setCursor(3,0);
lcd.print(sensors.getTempCByIndex(0));
// lcd.setCursor(14,0);
// lcd.print(".C");
lcd.setCursor(0,1); //Ustawienie kursora
lcd.print("T2"); //Dodanie treści
lcd.setCursor(3,1);
lcd.print(sensors.getTempCByIndex(1));
// lcd.setCursor(14,1);
// lcd.print(".C");
if( !digitalRead( flamePin ) )
digitalWrite( rele1Pin, LOW );
else
digitalWrite( rele1Pin, HIGH );
int t1 = sensors.getTempCByIndex(0); // Переменная типа int для t1
int t2 = sensors.getTempCByIndex(1); // Переменная типа int для t2
// Преобразуем переменные для отправки в MQTT в Брокер
static char char_temp[10]; // Переменная для перевода из int в char
dtostrf(t2, 3, 0, char_temp); // Перевод из int в char
static char char_hum[10];
dtostrf(t1, 3, 0, char_hum);
// int rele2 = client.subscribe("home/data/status/rele");
// static char rele2[10]; // Переменная для перевода из int в char
// dtostrf(r2, 3, 0, rele2); // Перевод из int в char
// if( !digitalRead( rele2 = 1 ) )
// digitalWrite( rele2Pin, LOW );
// else
// digitalWrite( rele2Pin, HIGH );
// if(autom == 0){
// if(String(pub.topic()) == "home/data/status/rele") // проверяем из нужного ли нам топика пришли данные
// {
// int stled = client.subscribe("home/data/status/rele"); // преобразуем полученные данные в тип integer
//digitalWrite(rele2Pin,client.subscribe("home/data/status/rele")); // включаем или выключаем светодиод в зависимоти от полученных значений данных
//}
//}
if (isnan(t2) || isnan(t1)) // Проверка удачно ли прошло считывание с 18b20
{
Serial.println("Failed to read from 18b20"); // Не удалось прочитать 18b20
}
else
{
Serial.print("Humidity: ");
Serial.print(t1);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(t2);
Serial.println(" *C");
}
if (client.connect("Mega2560"))
{
//Отправка данных по MQTT в Брокер
client.publish("home/data/status/sensor/temp", char_temp); //отправляем в Брокер значения
client.publish("home/data/status/sensor/hum", char_hum);
client.subscribe("home/data/status/rele"); // (тестовая) для отпр. данных в MajorDoMo вручную
delay(3000); // Отправка данных в Брокер раз в 5 секунд
client.disconnect(); // Отключиться
}
}