Cours:Wt32-eth01 : Différence entre versions
(Page créée avec « <source lang=cpp> →mqtt-ha-entities library switch example This example creates an HA-MQTT device with a switch entity. : #ifndef ETH_PHY_TYPE #define ETH_PHY_TY... ») |
|||
| Ligne 27 : | Ligne 27 : | ||
// You must set the next defines | // You must set the next defines | ||
#ifndef SECRETS_H | #ifndef SECRETS_H | ||
| − | #define MQTT_SERVER "192.168. | + | #define MQTT_SERVER "192.168.x.x" |
#define MQTT_PORT 1883 | #define MQTT_PORT 1883 | ||
#define MQTT_USER "MyBrokerUser" | #define MQTT_USER "MyBrokerUser" | ||
Version du 20 janvier 2026 à 22:36
/* mqtt-ha-entities library switch example
This example creates an HA-MQTT device with a switch entity.
*/
#ifndef ETH_PHY_TYPE
#define ETH_PHY_TYPE ETH_PHY_LAN8720
#define ETH_PHY_ADDR 0
#define ETH_PHY_MDC 23
#define ETH_PHY_MDIO 18
#define ETH_PHY_POWER -1
#define ETH_CLK_MODE ETH_CLOCK_GPIO0_IN
#endif
#include <ETH.h>
#include <Arduino.h>
#include<PubSubClient.h>
#include<HaMqttEntities.h>
#include <WiFiClient.h>
// This file is not included in the repository only used for local testing
// #include "secrets.h"
// You must set the next defines
#ifndef SECRETS_H
#define MQTT_SERVER "192.168.x.x"
#define MQTT_PORT 1883
#define MQTT_USER "MyBrokerUser"
#define MQTT_PASSWORD "MyBrokerPassword"
#endif
WiFiClient ethClient;
PubSubClient mqtt_client(ethClient);
// HA Parts
#define ENTITIES_COUNT 1
HADevice ha_device("example02","Example 2 HA-MQTT","1.0");
HASwitch ha_switch = HASwitch("example02switch","Test on/off",ha_device);
void ha_callback(HAEntity *entity, char *topic, byte *payload, unsigned int length);
static bool eth_connected = false;
// WARNING: onEvent is called from a separate FreeRTOS task (thread)!
void onEvent(arduino_event_id_t event) {
switch (event) {
case ARDUINO_EVENT_ETH_START:
Serial.println("ETH Started");
// The hostname must be set after the interface is started, but needs
// to be set before DHCP, so set it from the event handler thread.
ETH.setHostname("esp32-ethernet");
break;
case ARDUINO_EVENT_ETH_CONNECTED: Serial.println("ETH Connected"); break;
case ARDUINO_EVENT_ETH_GOT_IP:
Serial.println("ETH Got IP");
Serial.println(ETH);
eth_connected = true;
break;
case ARDUINO_EVENT_ETH_LOST_IP:
Serial.println("ETH Lost IP");
eth_connected = false;
break;
case ARDUINO_EVENT_ETH_DISCONNECTED:
Serial.println("ETH Disconnected");
eth_connected = false;
break;
case ARDUINO_EVENT_ETH_STOP:
Serial.println("ETH Stopped");
eth_connected = false;
break;
default: break;
}
}
void setup() {
Serial.begin(115200);
Network.onEvent(onEvent);
#if ESP_ARDUINO_VERSION_MAJOR >= 3
// The argument order changed in esp32-arduino v3+
ETH.begin(ETH_PHY_LAN8720, 1, 23, 18, 16, ETH_CLOCK_GPIO0_IN);
#else
ETH.begin(1, 16, 23, 18, ETH_PHY_LAN8720, ETH_CLOCK_GPIO0_IN);
#endif
mqtt_client.setServer(MQTT_SERVER, MQTT_PORT);
HAMQTT.begin(mqtt_client,ENTITIES_COUNT);
HAMQTT.addEntity(ha_switch);
HAMQTT.setCallback(ha_callback);
}
void loop() {
if(eth_connected && !HAMQTT.connected()) {
if( HAMQTT.connect("examples",MQTT_USER,MQTT_PASSWORD) )
Serial.println("Connected to MQTT");
else
{
Serial.println("Failed to connect to MQTT. Retry in 5 seconds ...");
delay(5000);
}
}
HAMQTT.loop();
}
/* Callback from HA-MQTT entities. It is called when an entity changes its state.
Entity can be NULL when the received topic is not related to any entity.
This is useful to handle other topics with the same mqtt client.
*/
void ha_callback(HAEntity *entity, char *topic, byte *payload,
unsigned int length)
{
Serial.printf("Received topic: %s\n",topic);
if(entity == &ha_switch) {
Serial.printf("Changed switch state to %d \n",ha_switch.getState());
}
}