My Project
radio.cpp
Go to the documentation of this file.
1 // Copyright (c) 2023 Samuli Nyman
2 // SPDX-License-Identifier: MIT
3 
4 #include "radio.h"
5 #include <esp_now.h>
6 #include "esp_wifi.h"
7 #include <WiFi.h>
8 
9 esp_now_peer_info_t peerInfo;
10 
11 uint8_t broadcastAddress[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
12 
13 void internalDataReceivedCallback(const uint8_t * mac, const uint8_t *incomingData, int len);
14 void internalDataSentCallback(const uint8_t *mac_addr, esp_now_send_status_t status);
15 
17 
18 
19 void printAddress(uint8_t mac[6])
20 {
21  for (int n = 0; n < 6; n++)
22  {
23  Serial.print(((uint8_t) mac[n]) < 16 ? "0" : "");
24  Serial.print(mac[n], HEX);
25  Serial.print(n < 5 ? ":" : "");
26  }
27  Serial.println();
28 }
29 
30 uint8_t initializeESPNOW(uint8_t *macAddress)
31 {
32  memcpy(broadcastAddress, macAddress, 6);
33 
34  WiFi.mode(WIFI_STA);
35  // set receive address
36  if(esp_wifi_set_mac(WIFI_IF_STA, broadcastAddress))
37  {
38  Serial.println("Invalid MAC address!");
39  return 1;
40  }
41 
42  if (esp_now_init() != ESP_OK) {
43  Serial.println("Error initializing ESP-NOW");
44  return 1;
45  }
46 
47  esp_wifi_set_protocol( WIFI_IF_STA , WIFI_PROTOCOL_LR);
48  esp_now_register_send_cb(internalDataSentCallback);
49  esp_now_register_recv_cb(internalDataReceivedCallback);
50 
51  // Register peer
52  memcpy(peerInfo.peer_addr, broadcastAddress, 6);
53  peerInfo.channel = 0;
54  peerInfo.encrypt = false;
55 
56  if (esp_now_add_peer(&peerInfo) != ESP_OK){
57  Serial.println("Failed to add peer");
58  return 1;
59  }
60 
61 
63 
64  return 0;
65 }
66 
67 void createMacAddress(uint8_t lastByte, uint8_t mac[6])
68 {
69  mac[0] = 0x02;
70  mac[1] = 0x2A;
71  mac[2] = 0x56;
72  mac[3] = 0x72;
73  mac[4] = 0x2B;
74  mac[5] = lastByte;
75 }
76 
77 uint8_t sendDataString(String data)
78 {
80  {
81  const char *charData = data.c_str();
82  return esp_now_send(broadcastAddress, (uint8_t *) charData, data.length());
83  }else{
84  Serial.println("Radio has not been initialized");
85  return 1;
86  }
87 }
88 
89 uint8_t sendData(char *data, uint16_t len)
90 {
92  {
93  return esp_now_send(broadcastAddress, (uint8_t *) data, len);
94  }else{
95  Serial.println("Radio has not been initialized");
96  return 1;
97  }
98 }
99 
100 
101 // This function is called every time data has been sent
102 void internalDataSentCallback(const uint8_t *mac_addr, esp_now_send_status_t status)
103 {
104  bool success = status == ESP_NOW_SEND_SUCCESS;
105  onDataSent(success);
106 }
107 
108 // This function is called every time data has been received
109 void internalDataReceivedCallback(const uint8_t * mac, const uint8_t *incomingData, int len)
110 {
111  String receivedData = "";
112  for (int i = 0; i < len; i++) {
113  receivedData += (char) incomingData[i];
114  }
115  onDataReceived(receivedData);
116  onBinaryDataReceived(incomingData, len);
117 }
118 
119 __attribute__((weak)) void onDataReceived(String data) {
120 
121 }
122 
123 __attribute__((weak)) void onBinaryDataReceived(const uint8_t *data, int len){
124 
125 }
126 
127 __attribute__((weak)) void onDataSent(const bool success){
128 
129 }
radio.h
sendData
uint8_t sendData(char *data, uint16_t len)
Definition: radio.cpp:89
printAddress
void printAddress(uint8_t mac[6])
Definition: radio.cpp:19
radioHasBeenInitialized
bool radioHasBeenInitialized
Definition: radio.cpp:16
internalDataReceivedCallback
void internalDataReceivedCallback(const uint8_t *mac, const uint8_t *incomingData, int len)
Definition: radio.cpp:109
initializeESPNOW
uint8_t initializeESPNOW(uint8_t *macAddress)
Definition: radio.cpp:30
len
int len
Definition: radio.h:13
__attribute__
__attribute__((weak)) void onDataReceived(String data)
Definition: radio.cpp:119
internalDataSentCallback
void internalDataSentCallback(const uint8_t *mac_addr, esp_now_send_status_t status)
Definition: radio.cpp:102
createMacAddress
void createMacAddress(uint8_t lastByte, uint8_t mac[6])
Definition: radio.cpp:67
peerInfo
esp_now_peer_info_t peerInfo
Definition: radio.cpp:9
sendDataString
uint8_t sendDataString(String data)
Definition: radio.cpp:77
broadcastAddress
uint8_t broadcastAddress[]
Definition: radio.cpp:11