#include <WiFi.h>
#include <esp_now.h>
#include <DHTesp.h>
#define DHT_PIN 19
#define LED 12
#define C_TIME 1000000
#define BTN 4
hw_timer_t*My_timer = NULL;
void IRAM_ATTR onTimer(){
digitalWrite(LED, !digitalRead(LED));
}
void IRAM_ATTR trigger_led(){
digitalWrite(LED, !digitalRead(LED));
}
DHTesp dhtSensor;
// MAC receiver
uint8_t broadcastAddress[] = {0x8C, 0xAA, 0xB5, 0x84, 0xFB, 0x90};
esp_now_peer_info_t peerInfo;
// Sending callback
void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status) {
Serial.print("Send Status: ");
Serial.println(status == ESP_NOW_SEND_SUCCESS ? "Ok" : "Error");
}
//Receiving Callback
void OnDataRecv(const uint8_t * mac, const uint8_t *data, int len) {
Serial.print("Message received: ");
char receivedString[len];
memcpy(receivedString, data, len);
Serial.println(String(receivedString));
}
void setup() {
Serial.begin(115200);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
pinMode(LED,OUTPUT);//PIN SETUP
pinMode(BTN,INPUT);
attachInterrupt(BTN, trigger_led,RISING);
//Interrupt timer
My_timer = timerBegin(0,80,true);
timerAttachInterrupt(My_timer,&onTimer,true);
timerAlarmWrite(My_timer,C_TIME,true);
timerAlarmEnable(My_timer);
WiFi.mode(WIFI_STA);
esp_now_init();
//send callback
esp_now_register_send_cb(OnDataSent);
//receive callback
esp_now_register_recv_cb(OnDataRecv);
// Peer Registration
memcpy(peerInfo.peer_addr, broadcastAddress, 6);
peerInfo.channel = 0;
peerInfo.encrypt = false;
// Add peer (Is possible to register multiple peers)
esp_now_add_peer(&peerInfo);
}
void loop() {
while (!Serial.available()); // Wait for input
String message = Serial.readStringUntil('\n');
/* esp_now_send(uint8_t *da, uint8_t *data, uint8_t *len)
Parameters:
uint8_t *da: array of the MAC address of the peer to which the data packet is sent.
If the address is NULL, the data is sent to all addresses in the Communication Table (all the registered peers).
uint8_t *data: array with the data packet to be sent.
uint8_t len: length of the array of the data packet.
*/
esp_now_send(broadcastAddress, (uint8_t*)message.c_str(), message.length() + 1);
float temperature = dhtSensor.getTemperature();
float humidity = dhtSensor.getHumidity();
Serial.println("Temp: "+ String(temperature,2)+'C');
Serial.println("Humidity: "+ String((humidity),2)+'%');
Serial.println("-------------");
delay(1000);
}