revised esp32<->esp32 broadcast comm.
This commit is contained in:
parent
85ed754955
commit
7db9b9a374
4 changed files with 104 additions and 81 deletions
|
|
@ -1 +1 @@
|
|||
Subproject commit e5e7497cc468cb1814e490a721c6d32384561b88
|
||||
Subproject commit 5d289fd8151796d5c1861b02360d3a8c8971fea0
|
||||
|
|
@ -16,8 +16,9 @@
|
|||
//============<identities>============
|
||||
//
|
||||
#define MY_GROUP_ID (10000)
|
||||
#define MY_ID (MY_GROUP_ID + 1)
|
||||
#define MY_ID (MY_GROUP_ID + 2)
|
||||
#define MY_SIGN ("AUDIOOOO")
|
||||
#define ADDRESSBOOK_TITLE ("broadcast only")
|
||||
//
|
||||
//============</identities>============
|
||||
|
||||
|
|
@ -35,15 +36,14 @@
|
|||
// + then, network would be flooded by infinite duplicating msg.,
|
||||
// unless they stop reacting to 'known' req. for some seconds. (e.g. 3 seconds)
|
||||
//
|
||||
// 'USE_ALTERNATIVE_ADDRESSES'
|
||||
// 'ADDRESSBOOK_TITLE'
|
||||
// --> peer list limited max. 20.
|
||||
// so, we have alternative address book that covers after 20th.
|
||||
// so, we might use different address books for each node to cover a network of more than 20 nodes.
|
||||
//
|
||||
//==========</list-of-configurations>==========
|
||||
//
|
||||
#define DISABLE_AP
|
||||
#define REPLICATE_NOTE_REQ
|
||||
#define USE_ALTERNATIVE_ADDRESSES
|
||||
|
||||
//============<audioooo-param>============
|
||||
#define GAIN_MAX 1.0 // if 1.0 is too loud, give max. limit here.
|
||||
|
|
@ -256,7 +256,29 @@ void repeat() {
|
|||
memcpy(frm + 1, (uint8_t *) ¬e_now, sizeof(Note));
|
||||
frm[frm_size - 1] = ']';
|
||||
//
|
||||
esp_now_send(NULL, frm, frm_size); // to all peers in the list.
|
||||
// strange but following didn't work as expected. (instead, i have to send one-by-one.)
|
||||
// esp_now_send(NULL, frm, frm_size); // to all peers in the list.
|
||||
|
||||
// so, forget about peer list -> just pick a broadcast peer to be sent.
|
||||
uint8_t broadcastmac[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
|
||||
esp_now_send(broadcastmac, frm, frm_size);
|
||||
|
||||
// (DEBUG) fetch full peer list
|
||||
esp_now_peer_num_t num;
|
||||
esp_now_get_peer_num(&num);
|
||||
esp_now_peer_info_t peer_info;
|
||||
bool first = true;
|
||||
for (uint8_t ii = 0; ii < num.total_num; ii++) {
|
||||
esp_now_fetch_peer(first, &peer_info);
|
||||
if (first) first = false;
|
||||
MONITORING_SERIAL.printf("# peer: %02X:%02X:%02X:%02X:%02X:%02X\n",
|
||||
peer_info.peer_addr[0],
|
||||
peer_info.peer_addr[1],
|
||||
peer_info.peer_addr[2],
|
||||
peer_info.peer_addr[3],
|
||||
peer_info.peer_addr[4],
|
||||
peer_info.peer_addr[5]);
|
||||
}
|
||||
//
|
||||
MONITORING_SERIAL.print("repeat! ==> ");
|
||||
MONITORING_SERIAL.println(note_now.to_string());
|
||||
|
|
@ -298,21 +320,6 @@ void hello() {
|
|||
if (hello_delay < 100) hello_delay = 100;
|
||||
hello_task.restartDelayed(hello_delay);
|
||||
}
|
||||
|
||||
// //TEST
|
||||
// Note n = {
|
||||
// 10001, // int32_t id;
|
||||
// 1, // float pitch;
|
||||
// 127, // float velocity;
|
||||
// 1, // float onoff;
|
||||
// 0, // float x1;
|
||||
// 0, // float x2;
|
||||
// 0, // float x3;
|
||||
// 0, // float x4;
|
||||
// 5000 // float ps;
|
||||
// };
|
||||
// note_now = n;
|
||||
// repeat_task.restart();
|
||||
}
|
||||
Task hello_task(0, TASK_ONCE, &hello, &runner, false);
|
||||
|
||||
|
|
@ -402,7 +409,6 @@ void onDataReceive(const uint8_t * mac, const uint8_t *incomingData, int32_t len
|
|||
}
|
||||
}
|
||||
|
||||
//
|
||||
MONITORING_SERIAL.println(note.to_string());
|
||||
|
||||
#if defined(REPLICATE_NOTE_REQ)
|
||||
|
|
@ -417,7 +423,11 @@ void onDataReceive(const uint8_t * mac, const uint8_t *incomingData, int32_t len
|
|||
|
||||
// on 'sent'
|
||||
void onDataSent(const uint8_t *mac_addr, esp_now_send_status_t sendStatus) {
|
||||
if (sendStatus != 0) MONITORING_SERIAL.println("Delivery failed!");
|
||||
// well, i think this cb should be called once for EVERY single TX attempts,
|
||||
// but in reality, it doesn't get called that often.
|
||||
// i think this is sorta bug. but have no clear clue.
|
||||
MONITORING_SERIAL.printf("* delivery attempt! ~~~>>> %02X:%02X:%02X:%02X:%02X:%02X\n", mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]);
|
||||
if (sendStatus != 0) MONITORING_SERIAL.printf("* ==>> FAILED :(\n\n");
|
||||
}
|
||||
|
||||
// SD TEST
|
||||
|
|
@ -505,6 +515,7 @@ void setup() {
|
|||
Serial.println("-");
|
||||
Serial.println("- my id: " + String(MY_ID) + ", gid: " + String(MY_GROUP_ID) + ", call me ==> \"" + String(MY_SIGN) + "\"");
|
||||
Serial.println("- mac address: " + WiFi.macAddress() + ", channel: " + String(WIFI_CHANNEL));
|
||||
Serial.println("- my peer book ==> \"" + String(ADDRESSBOOK_TITLE) + "\"");
|
||||
#if defined(HAVE_CLIENT)
|
||||
Serial.println("- ======== 'HAVE_CLIENT' ========");
|
||||
#endif
|
||||
|
|
@ -543,20 +554,16 @@ void setup() {
|
|||
// uint8_t broadcastmac[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
|
||||
//
|
||||
// //
|
||||
// esp_now_peer_info_t peerInfo;
|
||||
// esp_now_peer_info_t peerInfo = {};
|
||||
// memcpy(peerInfo.peer_addr, broadcastmac, 6);
|
||||
// peerInfo.channel = 0;
|
||||
// peerInfo.encrypt = false;
|
||||
// esp_now_add_peer(&peerInfo);
|
||||
|
||||
#if defined(USE_ALTERNATIVE_ADDRESSES)
|
||||
AddressBook * book = lib.getBookByTitle("audioooo alt");
|
||||
#else
|
||||
AddressBook * book = lib.getBookByTitle("audioooo");
|
||||
#endif
|
||||
AddressBook * book = lib.getBookByTitle(ADDRESSBOOK_TITLE);
|
||||
for (int idx = 0; idx < book->list.size(); idx++) {
|
||||
Serial.println("- ! (esp_now_add_peer) ==> add a '" + book->list[idx].name + "'.");
|
||||
esp_now_peer_info_t peerInfo;
|
||||
esp_now_peer_info_t peerInfo = {};
|
||||
memcpy(peerInfo.peer_addr, book->list[idx].mac, 6);
|
||||
peerInfo.channel = 0;
|
||||
peerInfo.encrypt = false;
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
Subproject commit e5e7497cc468cb1814e490a721c6d32384561b88
|
||||
Subproject commit 5d289fd8151796d5c1861b02360d3a8c8971fea0
|
||||
108
q/src/main.cpp
108
q/src/main.cpp
|
|
@ -18,6 +18,7 @@
|
|||
#define MY_GROUP_ID (70000)
|
||||
#define MY_ID (MY_GROUP_ID + 1)
|
||||
#define MY_SIGN ("Q")
|
||||
#define ADDRESSBOOK_TITLE ("broadcast only")
|
||||
//
|
||||
//============</identities>============
|
||||
|
||||
|
|
@ -38,15 +39,14 @@
|
|||
// 'GEN_NOTE_REQ'
|
||||
// --> this will generate 'note' msg.
|
||||
//
|
||||
// 'USE_ALTERNATIVE_ADDRESSES'
|
||||
// 'ADDRESSBOOK_TITLE'
|
||||
// --> peer list limited max. 20.
|
||||
// so, we have alternative address book that covers after 20th.
|
||||
// so, we might use different address books for each node to cover a network of more than 20 nodes.
|
||||
//
|
||||
//==========</list-of-configurations>==========
|
||||
//
|
||||
#define DISABLE_AP
|
||||
#define GEN_NOTE_REQ
|
||||
// #define USE_ALTERNATIVE_ADDRESSES
|
||||
|
||||
//============<parameters>============
|
||||
//
|
||||
|
|
@ -234,7 +234,7 @@ void screen() {
|
|||
|
||||
// create a NOTE req. and send it out.
|
||||
Note note_composed = {
|
||||
10001, // int32_t id;
|
||||
10000, // int32_t id;
|
||||
song_request, // float pitch;
|
||||
127, // float velocity;
|
||||
1, // float onoff;
|
||||
|
|
@ -244,6 +244,9 @@ void screen() {
|
|||
0, // float x4;
|
||||
0 // float ps;
|
||||
};
|
||||
MONITORING_SERIAL.print("# posting a req.# ==> ");
|
||||
MONITORING_SERIAL.println(note_composed.to_string());
|
||||
|
||||
//
|
||||
uint8_t frm_size = sizeof(Note) + 2;
|
||||
uint8_t frm[frm_size];
|
||||
|
|
@ -251,11 +254,29 @@ void screen() {
|
|||
memcpy(frm + 1, (uint8_t *) ¬e_composed, sizeof(Note));
|
||||
frm[frm_size - 1] = ']';
|
||||
//
|
||||
esp_now_send(NULL, frm, frm_size); // to all peers in the list.
|
||||
//
|
||||
MONITORING_SERIAL.print("# posting a req.# ==> ");
|
||||
MONITORING_SERIAL.println(note_composed.to_string());
|
||||
//
|
||||
// strange but following didn't work as expected. (instead, i have to send one-by-one.)
|
||||
// esp_now_send(NULL, frm, frm_size); // to all peers in the list.
|
||||
|
||||
// so, forget about peer list -> just pick a broadcast peer to be sent.
|
||||
uint8_t broadcastmac[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
|
||||
esp_now_send(broadcastmac, frm, frm_size);
|
||||
|
||||
// (DEBUG) fetch full peer list
|
||||
esp_now_peer_num_t num;
|
||||
esp_now_get_peer_num(&num);
|
||||
esp_now_peer_info_t peer_info;
|
||||
bool first = true;
|
||||
for (uint8_t ii = 0; ii < num.total_num; ii++) {
|
||||
esp_now_fetch_peer(first, &peer_info);
|
||||
if (first) first = false;
|
||||
MONITORING_SERIAL.printf("# peer: %02X:%02X:%02X:%02X:%02X:%02X\n",
|
||||
peer_info.peer_addr[0],
|
||||
peer_info.peer_addr[1],
|
||||
peer_info.peer_addr[2],
|
||||
peer_info.peer_addr[3],
|
||||
peer_info.peer_addr[4],
|
||||
peer_info.peer_addr[5]);
|
||||
}
|
||||
|
||||
//+ play start for myself
|
||||
sample_now = song_request;
|
||||
|
|
@ -428,7 +449,29 @@ void repeat() {
|
|||
memcpy(frm + 1, (uint8_t *) ¬e_now, sizeof(Note));
|
||||
frm[frm_size - 1] = ']';
|
||||
//
|
||||
esp_now_send(NULL, frm, frm_size); // to all peers in the list.
|
||||
// strange but following didn't work as expected. (instead, i have to send one-by-one.)
|
||||
// esp_now_send(NULL, frm, frm_size); // to all peers in the list.
|
||||
|
||||
// so, forget about peer list -> just pick a broadcast peer to be sent.
|
||||
uint8_t broadcastmac[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
|
||||
esp_now_send(broadcastmac, frm, frm_size);
|
||||
|
||||
// (DEBUG) fetch full peer list
|
||||
esp_now_peer_num_t num;
|
||||
esp_now_get_peer_num(&num);
|
||||
esp_now_peer_info_t peer_info;
|
||||
bool first = true;
|
||||
for (uint8_t ii = 0; ii < num.total_num; ii++) {
|
||||
esp_now_fetch_peer(first, &peer_info);
|
||||
if (first) first = false;
|
||||
MONITORING_SERIAL.printf("# peer: %02X:%02X:%02X:%02X:%02X:%02X\n",
|
||||
peer_info.peer_addr[0],
|
||||
peer_info.peer_addr[1],
|
||||
peer_info.peer_addr[2],
|
||||
peer_info.peer_addr[3],
|
||||
peer_info.peer_addr[4],
|
||||
peer_info.peer_addr[5]);
|
||||
}
|
||||
//
|
||||
MONITORING_SERIAL.print("repeat! ==> ");
|
||||
MONITORING_SERIAL.println(note_now.to_string());
|
||||
|
|
@ -470,33 +513,6 @@ void hello() {
|
|||
if (hello_delay < 100) hello_delay = 100;
|
||||
hello_task.restartDelayed(hello_delay);
|
||||
}
|
||||
|
||||
// //TEST
|
||||
// {
|
||||
// Note note_composed = {
|
||||
// 10001, // int32_t id;
|
||||
// 1, // float pitch;
|
||||
// 127, // float velocity;
|
||||
// 1, // float onoff;
|
||||
// 0, // float x1;
|
||||
// 0, // float x2;
|
||||
// 0, // float x3;
|
||||
// 0, // float x4;
|
||||
// 5000 // float ps;
|
||||
// };
|
||||
// //
|
||||
// uint8_t frm_size = sizeof(Note) + 2;
|
||||
// uint8_t frm[frm_size];
|
||||
// frm[0] = '[';
|
||||
// memcpy(frm + 1, (uint8_t *) ¬e_composed, sizeof(Note));
|
||||
// frm[frm_size - 1] = ']';
|
||||
// //
|
||||
// esp_now_send(NULL, frm, frm_size); // to all peers in the list.
|
||||
// //
|
||||
// MONITORING_SERIAL.print("# posting a req.# ==> ");
|
||||
// MONITORING_SERIAL.println(note_composed.to_string());
|
||||
// //
|
||||
// }
|
||||
}
|
||||
Task hello_task(0, TASK_ONCE, &hello, &runner, false);
|
||||
|
||||
|
|
@ -593,13 +609,16 @@ void onDataReceive(const uint8_t * mac, const uint8_t *incomingData, int32_t len
|
|||
new_note_time = millis();
|
||||
}
|
||||
#endif
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// on 'sent'
|
||||
void onDataSent(const uint8_t *mac_addr, esp_now_send_status_t sendStatus) {
|
||||
if (sendStatus != 0) MONITORING_SERIAL.println("Delivery failed!");
|
||||
// well, i think this cb should be called once for EVERY single TX attempts,
|
||||
// but in reality, it doesn't get called that often.
|
||||
// i think this is sorta bug. but have no clear clue.
|
||||
MONITORING_SERIAL.printf("* delivery attempt! ~~~>>> %02X:%02X:%02X:%02X:%02X:%02X\n", mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]);
|
||||
if (sendStatus != 0) MONITORING_SERIAL.printf("* ==>> FAILED :(\n\n");
|
||||
}
|
||||
|
||||
// SD TEST
|
||||
|
|
@ -695,6 +714,7 @@ void setup() {
|
|||
Serial.println("-");
|
||||
Serial.println("- my id: " + String(MY_ID) + ", gid: " + String(MY_GROUP_ID) + ", call me ==> \"" + String(MY_SIGN) + "\"");
|
||||
Serial.println("- mac address: " + WiFi.macAddress() + ", channel: " + String(WIFI_CHANNEL));
|
||||
Serial.println("- my peer book ==> \"" + String(ADDRESSBOOK_TITLE) + "\"");
|
||||
#if defined(HAVE_CLIENT)
|
||||
Serial.println("- ======== 'HAVE_CLIENT' ========");
|
||||
#endif
|
||||
|
|
@ -733,20 +753,16 @@ void setup() {
|
|||
// uint8_t broadcastmac[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
|
||||
//
|
||||
// //
|
||||
// esp_now_peer_info_t peerInfo;
|
||||
// esp_now_peer_info_t peerInfo = {};
|
||||
// memcpy(peerInfo.peer_addr, broadcastmac, 6);
|
||||
// peerInfo.channel = 0;
|
||||
// peerInfo.encrypt = false;
|
||||
// esp_now_add_peer(&peerInfo);
|
||||
|
||||
#if defined(USE_ALTERNATIVE_ADDRESSES)
|
||||
AddressBook * book = lib.getBookByTitle("audioooo alt");
|
||||
#else
|
||||
AddressBook * book = lib.getBookByTitle("audioooo");
|
||||
#endif
|
||||
AddressBook * book = lib.getBookByTitle(ADDRESSBOOK_TITLE);
|
||||
for (int idx = 0; idx < book->list.size(); idx++) {
|
||||
Serial.println("- ! (esp_now_add_peer) ==> add a '" + book->list[idx].name + "'.");
|
||||
esp_now_peer_info_t peerInfo;
|
||||
esp_now_peer_info_t peerInfo = {};
|
||||
memcpy(peerInfo.peer_addr, book->list[idx].mac, 6);
|
||||
peerInfo.channel = 0;
|
||||
peerInfo.encrypt = false;
|
||||
|
|
|
|||
Loading…
Reference in a new issue