everyone ==> broadcast !

This commit is contained in:
Dooho Yi 2021-02-21 23:44:41 +09:00
parent 355a033738
commit 4a507b2372
7 changed files with 276 additions and 723 deletions

View file

@ -14,19 +14,12 @@
// this module will be an esp-now node in a group. // this module will be an esp-now node in a group.
// like, a bird in a group of birds. // like, a bird in a group of birds.
// //
// esp-now @ esp8266 DO support broadcast address (FF:FF:FF:FF:FF:FF) // esp-now @ esp8266 w/ broadcast address (FF:FF:FF:FF:FF:FF)
// w/ NONOS-SDK of espressif // always broadcasting. everyone is 'talkative'.
// and you can enable that w/ Platformio, applying some special build flags.
// --> https://github.com/esp8266/Arduino/issues/6174#issuecomment-509115454
// (yet, w/ Arduino, this is not available yet.)
//
// so, at first, we will simply/stably go w/o broadcasting.
// and, if broadcast is really needed we can activate (@Platformio)
// //
// then, let is save a value in EEPROM (object with memory) // then, let is save a value in EEPROM (object with memory)
// no broadcast for now. if needed we can achieve that too.
@ -66,12 +59,6 @@
//============<parameters>============ //============<parameters>============
// //
#define MY_BOOK ("root")
// #define MY_BOOK ("friend")
// #define MY_BOOK ("sampler")
//
#define PEER_COUNT_MAX (20)
//
#define LED_PERIOD (11111) #define LED_PERIOD (11111)
#define LED_ONTIME (1) #define LED_ONTIME (1)
#define LED_GAPTIME (222) #define LED_GAPTIME (222)
@ -109,7 +96,6 @@
//post & addresses //post & addresses
#include "../../post.h" #include "../../post.h"
AddressLibrary library;
//espnow //espnow
#include <ESP8266WiFi.h> #include <ESP8266WiFi.h>
@ -215,60 +201,6 @@ void blink() {
} }
Task blink_task(0, TASK_FOREVER, &blink, &runner, true); // -> ENABLED, at start-up. Task blink_task(0, TASK_FOREVER, &blink, &runner, true); // -> ENABLED, at start-up.
//task #1 : regular post collection
#if defined(HAVE_CLIENT)
void collect_post() {
//
//postman (serial comm.)
static bool insync = false;
if (insync == false) {
while (Serial.available() > 0) {
// search the last byte
char last = Serial.read();
// expectable last of the messages
if (last == ']' || last == '}') {
insync = true;
}
}
} else {
//
if (Serial.available() > 0) {
//
char type = Serial.peek();
//
if (type == '[') {
//expecting a Note message.
uint8_t frm_size = sizeof(Note) + 2;
//
if (Serial.available() >= frm_size) {
//
uint8_t frm[frm_size];
//
Serial.readBytes(frm, frm_size);
char first = frm[0];
char last = frm[frm_size - 1];
if (first == '[' && last == ']') {
//
//good. ==> ok, post it.
//
//pseudo-broadcast using peer-list!
//
esp_now_send(NULL, frm, frm_size);
//
MONITORING_SERIAL.write(frm, frm_size);
MONITORING_SERIAL.print(" ==(esp_now_send/0)==> ");
//
} else {
insync = false; //error!
}
}
}
}
}
}
Task collect_post_task(1, TASK_FOREVER, &collect_post, &runner, true); // by default, ENABLED
#endif
// //
void setup() { void setup() {
@ -301,16 +233,6 @@ void setup() {
#if defined(HAVE_CLIENT_I2C) #if defined(HAVE_CLIENT_I2C)
Serial.println("- ======== 'HAVE_CLIENT_I2C' ========"); Serial.println("- ======== 'HAVE_CLIENT_I2C' ========");
#endif #endif
Serial.println("-");
Serial.println("- * address library >>>");
for (uint32_t j = 0; j < library.lib.size(); j++) {
Serial.println("-");
Serial.println("- * (" + String(j + 1) + ") - \"" + library.lib[j].title + "\" >>>");
Serial.println("-");
for (uint32_t i = 0; i < library.lib[j].list.size(); i++) {
Serial.println("- " + library.lib[j].list[i].to_string());
}
}
Serial.println("-"); Serial.println("-");
Serial.println("\".-.-.-. :)\""); Serial.println("\".-.-.-. :)\"");
Serial.println(); Serial.println();
@ -331,43 +253,13 @@ void setup() {
esp_now_set_self_role(ESP_NOW_ROLE_COMBO); esp_now_set_self_role(ESP_NOW_ROLE_COMBO);
esp_now_register_send_cb(onDataSent); esp_now_register_send_cb(onDataSent);
esp_now_register_recv_cb(onDataReceive); esp_now_register_recv_cb(onDataReceive);
//
Serial.println("-");
Serial.println("- we will broadcast everything. ==> add only the 'broadcast peer' (FF:FF:FF:FF:FF:FF).");
uint8_t broadcastmac[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
esp_now_add_peer(broadcastmac, ESP_NOW_ROLE_COMBO, 1, NULL, 0);
// //
AddressBook* members = library.getBookByTitle(MY_BOOK);
Serial.println("! registering peers in the book titled: \"" + String(MY_BOOK) + "\"");
//
if (members == NULL) {
//oh, no such book!
Serial.println("---- :( oh, no such book! ===> " + String(MY_BOOK));
Serial.println(" .... no peer will be registered. come back with different 'title' !");
} else {
Serial.println("---- :) oki-doki, found it!");
Serial.println();
//
for (uint32_t i = 0; i < members->list.size(); i++) {
if (i >= PEER_COUNT_MAX) {
Serial.println("(!) @@@@ Hey, no more free-slot. @@@@ ==> " + members->list[i].to_string() + " ==> IGNORED :(");
} else {
//some decoration?
Serial.print("" + String((i + 1)%10) + "_ ");
for (uint32_t k = 0; k < i; k++) Serial.print(" ");
//
Serial.println("~~>> 'esp_now_add_peer' with ... " + members->list[i].to_string());
esp_now_add_peer(members->list[i].mac, ESP_NOW_ROLE_COMBO, 1, NULL, 0); // <-- '1' : "Channel does not affect any function" ... *.-a
//
// int esp_now_add_peer(u8 *mac_addr, u8 role, u8 channel, u8 *key, u8 key_len)
// - https://www.espressif.com/sites/default/files/documentation/2c-esp8266_non_os_sdk_api_reference_en.pdf
//
// "Channel does not affect any function, but only stores the channel information
// for the application layer. The value is defined by the application layer. For
// example, 0 means that the channel is not defined; 1 ~ 14 mean valid
// channels; all the rest values can be assigned functions that are specified
// by the application layer."
// - https://www.espressif.com/sites/default/files/documentation/esp-now_user_guide_en.pdf
}
}
}
Serial.println("-"); Serial.println("-");
Serial.println("\".-.-.-. :)\""); Serial.println("\".-.-.-. :)\"");
Serial.println(); Serial.println();

View file

@ -9,6 +9,12 @@
// //
// 2021 02 15 // 2021 02 15
// //
// this module will be an esp-now node in a group.
// like, a bird in a group of birds.
//
// esp-now @ esp8266 w/ broadcast address (FF:FF:FF:FF:FF:FF)
// always broadcasting. everyone is 'talkative'.
//
//==========<configurations>=========== //==========<configurations>===========
// //
@ -32,39 +38,17 @@
#elif 0 #elif 0
#define SERIAL_SWAP #define SERIAL_SWAP
#define HAVE_CLIENT #define HAVE_CLIENT
// (3) sampler client
#elif 0
#define SERIAL_SWAP
#define HAVE_CLIENT
#define DISABLE_AP
// //
#endif #endif
// //
//==========</preset>========== //==========</preset>==========
//============<list of reserved keys>============
#define CRICKET_A_KEY 120 // geared (esp8266)
#define CRICKET_E_KEY 121 // geared (esp8266)
#define CRICKET_I_KEY 122 // geared (esp8266)
#define CRICKET_O_KEY 123 // geared (esp8266) // servo pin is different (D7)
#define CRICKET_U_KEY 124
#define CRICKET_W_KEY 125
#define CRICKET_Y_KEY 126
#define CRICKET_N_KEY 127 // fishing-fly (esp32)
//============</list of reserved keys>===========
//============<identity key>============ //============<identity key>============
#define ID_KEY 126 #define ID_KEY 126
//============</identity key>=========== //============</identity key>===========
//============<parameters>============ //============<parameters>============
// //
#define MY_BOOK ("root")
// #define MY_BOOK ("friend")
// #define MY_BOOK ("sampler")
//
#define PEER_COUNT_MAX (20)
//
#define LED_PERIOD (11111) #define LED_PERIOD (11111)
#define LED_ONTIME (1) #define LED_ONTIME (1)
#define LED_GAPTIME (222) #define LED_GAPTIME (222)
@ -99,7 +83,6 @@
//post & addresses //post & addresses
#include "../../post.h" #include "../../post.h"
AddressLibrary library;
//espnow //espnow
#include <ESP8266WiFi.h> #include <ESP8266WiFi.h>
@ -145,12 +128,10 @@ void hello() {
memcpy(frm + 1, (uint8_t *) &hello, sizeof(Hello)); memcpy(frm + 1, (uint8_t *) &hello, sizeof(Hello));
frm[frm_size - 1] = '}'; frm[frm_size - 1] = '}';
// //
//pseudo-broadcast using peer-list! esp_now_send(NULL, frm, frm_size); // just broadcast.
//
esp_now_send(AddressBook("root").list[0].mac, frm, frm_size);
// //
MONITORING_SERIAL.write(frm, frm_size); MONITORING_SERIAL.write(frm, frm_size);
MONITORING_SERIAL.println(" ==(esp_now_send/\"root\")==> "); MONITORING_SERIAL.println(" ==(esp_now_send/BROADCAST)==> ");
// //
if (hello_delay > 0) { if (hello_delay > 0) {
if (hello_delay < 100) hello_delay = 100; if (hello_delay < 100) hello_delay = 100;
@ -258,16 +239,6 @@ void setup() {
#if defined(DISABLE_AP) #if defined(DISABLE_AP)
Serial.println("- ======== 'DISABLE_AP' ========"); Serial.println("- ======== 'DISABLE_AP' ========");
#endif #endif
Serial.println("-");
Serial.println("- * address library >>>");
for (uint32_t j = 0; j < library.lib.size(); j++) {
Serial.println("-");
Serial.println("- * (" + String(j + 1) + ") - \"" + library.lib[j].title + "\" >>>");
Serial.println("-");
for (uint32_t i = 0; i < library.lib[j].list.size(); i++) {
Serial.println("- " + library.lib[j].list[i].to_string());
}
}
Serial.println("-"); Serial.println("-");
Serial.println("\".-.-.-. :)\""); Serial.println("\".-.-.-. :)\"");
Serial.println(); Serial.println();
@ -288,43 +259,13 @@ void setup() {
esp_now_set_self_role(ESP_NOW_ROLE_COMBO); esp_now_set_self_role(ESP_NOW_ROLE_COMBO);
esp_now_register_send_cb(onDataSent); esp_now_register_send_cb(onDataSent);
esp_now_register_recv_cb(onDataReceive); esp_now_register_recv_cb(onDataReceive);
//
Serial.println("-");
Serial.println("- we will broadcast everything. ==> add only the 'broadcast peer' (FF:FF:FF:FF:FF:FF).");
uint8_t broadcastmac[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
esp_now_add_peer(broadcastmac, ESP_NOW_ROLE_COMBO, 1, NULL, 0);
// //
AddressBook* members = library.getBookByTitle(MY_BOOK);
Serial.println("! registering peers in the book titled: \"" + String(MY_BOOK) + "\"");
//
if (members == NULL) {
//oh, no such book!
Serial.println("---- :( oh, no such book! ===> " + String(MY_BOOK));
Serial.println(" .... no peer will be registered. come back with different 'title' !");
} else {
Serial.println("---- :) oki-doki, found it!");
Serial.println();
//
for (uint32_t i = 0; i < members->list.size(); i++) {
if (i >= PEER_COUNT_MAX) {
Serial.println("(!) @@@@ Hey, no more free-slot. @@@@ ==> " + members->list[i].to_string() + " ==> IGNORED :(");
} else {
//some decoration?
Serial.print("" + String((i + 1)%10) + "_ ");
for (uint32_t k = 0; k < i; k++) Serial.print(" ");
//
Serial.println("~~>> 'esp_now_add_peer' with ... " + members->list[i].to_string());
esp_now_add_peer(members->list[i].mac, ESP_NOW_ROLE_COMBO, 1, NULL, 0); // <-- '1' : "Channel does not affect any function" ... *.-a
//
// int esp_now_add_peer(u8 *mac_addr, u8 role, u8 channel, u8 *key, u8 key_len)
// - https://www.espressif.com/sites/default/files/documentation/2c-esp8266_non_os_sdk_api_reference_en.pdf
//
// "Channel does not affect any function, but only stores the channel information
// for the application layer. The value is defined by the application layer. For
// example, 0 means that the channel is not defined; 1 ~ 14 mean valid
// channels; all the rest values can be assigned functions that are specified
// by the application layer."
// - https://www.espressif.com/sites/default/files/documentation/esp-now_user_guide_en.pdf
}
}
}
Serial.println("-"); Serial.println("-");
Serial.println("\".-.-.-. :)\""); Serial.println("\".-.-.-. :)\"");
Serial.println(); Serial.println();

View file

@ -9,6 +9,12 @@
// //
// 2021 02 15 // 2021 02 15
// //
// this module will be an esp-now node in a group.
// like, a bird in a group of birds.
//
// esp-now @ esp8266 w/ broadcast address (FF:FF:FF:FF:FF:FF)
// always broadcasting. everyone is 'talkative'.
//
//==========<configurations>=========== //==========<configurations>===========
// //
@ -54,12 +60,6 @@
//============<parameters>============ //============<parameters>============
// //
#define MY_BOOK ("root")
// #define MY_BOOK ("friend")
// #define MY_BOOK ("sampler")
//
#define PEER_COUNT_MAX (20)
//
#define LED_PERIOD (11111) #define LED_PERIOD (11111)
#define LED_ONTIME (1) #define LED_ONTIME (1)
#define LED_GAPTIME (222) #define LED_GAPTIME (222)
@ -94,7 +94,6 @@
//post & addresses //post & addresses
#include "../../post.h" #include "../../post.h"
AddressLibrary library;
//espnow //espnow
#include <ESP8266WiFi.h> #include <ESP8266WiFi.h>
@ -213,6 +212,33 @@ Task head_release_task(0, TASK_ONCE, &head_release);
// Task head_release_task(0, TASK_ONCE, &head_release); // Task head_release_task(0, TASK_ONCE, &head_release);
//*-*-*-*-*-*-*-*-*-*-*-*-* //*-*-*-*-*-*-*-*-*-*-*-*-*
//
extern Task hello_task;
static int hello_delay = 0;
void hello() {
//
Hello hello = {
ID_KEY
};
//
uint8_t frm_size = sizeof(Hello) + 2;
uint8_t frm[frm_size];
frm[0] = '{';
memcpy(frm + 1, (uint8_t *) &hello, sizeof(Hello));
frm[frm_size - 1] = '}';
//
esp_now_send(NULL, frm, frm_size); // just broadcast.
//
MONITORING_SERIAL.write(frm, frm_size);
MONITORING_SERIAL.println(" ==(esp_now_send/BROADCAST)==> ");
//
if (hello_delay > 0) {
if (hello_delay < 100) hello_delay = 100;
hello_task.restartDelayed(hello_delay);
}
}
Task hello_task(0, TASK_ONCE, &hello);
//task #0 : blink led //task #0 : blink led
extern Task blink_task; extern Task blink_task;
void blink() { void blink() {
@ -241,70 +267,6 @@ void blink() {
} }
Task blink_task(0, TASK_FOREVER, &blink, &runner, true); // -> ENABLED, at start-up. Task blink_task(0, TASK_FOREVER, &blink, &runner, true); // -> ENABLED, at start-up.
//task #1 : regular post collection
#if defined(HAVE_CLIENT)
void collect_post() {
//
//postman (serial comm.)
static bool insync = false;
if (insync == false) {
while (Serial.available() > 0) {
// search the last byte
char last = Serial.read();
// expectable last of the messages
if (last == ']' || last == '}') {
insync = true;
}
}
} else {
//
if (Serial.available() > 0) {
//
char type = Serial.peek();
//
if (type == '[') {
//expecting a Note message.
uint8_t frm_size = sizeof(Note) + 2;
//
if (Serial.available() >= frm_size) {
//
uint8_t frm[frm_size];
//
Serial.readBytes(frm, frm_size);
char first = frm[0];
char last = frm[frm_size - 1];
if (first == '[' && last == ']') {
//
//good. ==> ok, post it.
//
//pseudo-broadcast using addressbook!
//
for (uint32_t i = 0; i < members.list.size(); i++) {
esp_now_send(members.list[i].mac, frm, frm_size);
//
MONITORING_SERIAL.write(frm, frm_size);
MONITORING_SERIAL.print(" ==(esp_now_send)==> ");
//
MONITORING_SERIAL.print(members.list[i].mac[0], HEX);
for (int j = 1; j < 6; j++) {
MONITORING_SERIAL.print(":");
MONITORING_SERIAL.print(members.list[i].mac[j], HEX);
}
MONITORING_SERIAL.print(" ==> " + members.list[i].name);
//
}
//
} else {
insync = false; //error!
}
}
}
}
}
}
Task collect_post_task(1, TASK_FOREVER, &collect_post, &runner, true); // by default, ENABLED
#endif
// on 'Note' // on 'Note'
void onNoteHandler(Note & n) { void onNoteHandler(Note & n) {
// //
@ -393,16 +355,6 @@ void setup() {
#if defined(DISABLE_AP) #if defined(DISABLE_AP)
Serial.println("- ======== 'DISABLE_AP' ========"); Serial.println("- ======== 'DISABLE_AP' ========");
#endif #endif
Serial.println("-");
Serial.println("- * address library >>>");
for (uint32_t j = 0; j < library.lib.size(); j++) {
Serial.println("-");
Serial.println("- * (" + String(j + 1) + ") - \"" + library.lib[j].title + "\" >>>");
Serial.println("-");
for (uint32_t i = 0; i < library.lib[j].list.size(); i++) {
Serial.println("- " + library.lib[j].list[i].to_string());
}
}
Serial.println("-"); Serial.println("-");
Serial.println("\".-.-.-. :)\""); Serial.println("\".-.-.-. :)\"");
Serial.println(); Serial.println();
@ -423,43 +375,13 @@ void setup() {
esp_now_set_self_role(ESP_NOW_ROLE_COMBO); esp_now_set_self_role(ESP_NOW_ROLE_COMBO);
esp_now_register_send_cb(onDataSent); esp_now_register_send_cb(onDataSent);
esp_now_register_recv_cb(onDataReceive); esp_now_register_recv_cb(onDataReceive);
//
Serial.println("-");
Serial.println("- we will broadcast everything. ==> add only the 'broadcast peer' (FF:FF:FF:FF:FF:FF).");
uint8_t broadcastmac[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
esp_now_add_peer(broadcastmac, ESP_NOW_ROLE_COMBO, 1, NULL, 0);
// //
AddressBook* members = library.getBookByTitle(MY_BOOK);
Serial.println("! registering peers in the book titled: \"" + String(MY_BOOK) + "\"");
//
if (members == NULL) {
//oh, no such book!
Serial.println("---- :( oh, no such book! ===> " + String(MY_BOOK));
Serial.println(" .... no peer will be registered. come back with different 'title' !");
} else {
Serial.println("---- :) oki-doki, found it!");
Serial.println();
//
for (uint32_t i = 0; i < members->list.size(); i++) {
if (i >= PEER_COUNT_MAX) {
Serial.println("(!) @@@@ Hey, no more free-slot. @@@@ ==> " + members->list[i].to_string() + " ==> IGNORED :(");
} else {
//some decoration?
Serial.print("" + String((i + 1)%10) + "_ ");
for (uint32_t k = 0; k < i; k++) Serial.print(" ");
//
Serial.println("~~>> 'esp_now_add_peer' with ... " + members->list[i].to_string());
esp_now_add_peer(members->list[i].mac, ESP_NOW_ROLE_COMBO, 1, NULL, 0); // <-- '1' : "Channel does not affect any function" ... *.-a
//
// int esp_now_add_peer(u8 *mac_addr, u8 role, u8 channel, u8 *key, u8 key_len)
// - https://www.espressif.com/sites/default/files/documentation/2c-esp8266_non_os_sdk_api_reference_en.pdf
//
// "Channel does not affect any function, but only stores the channel information
// for the application layer. The value is defined by the application layer. For
// example, 0 means that the channel is not defined; 1 ~ 14 mean valid
// channels; all the rest values can be assigned functions that are specified
// by the application layer."
// - https://www.espressif.com/sites/default/files/documentation/esp-now_user_guide_en.pdf
}
}
}
Serial.println("-"); Serial.println("-");
Serial.println("\".-.-.-. :)\""); Serial.println("\".-.-.-. :)\"");
Serial.println(); Serial.println();
@ -482,6 +404,7 @@ void setup() {
randomSeed(analogRead(0)); randomSeed(analogRead(0));
//tasks //tasks
runner.addTask(hello_task);
runner.addTask(ring_side_task); runner.addTask(ring_side_task);
runner.addTask(ring_side_move_task); runner.addTask(ring_side_move_task);
runner.addTask(side_release_task); runner.addTask(side_release_task);

View file

@ -14,19 +14,12 @@
// this module will be an esp-now node in a group. // this module will be an esp-now node in a group.
// like, a bird in a group of birds. // like, a bird in a group of birds.
// //
// esp-now @ esp8266 DO support broadcast address (FF:FF:FF:FF:FF:FF) // esp-now @ esp8266 w/ broadcast address (FF:FF:FF:FF:FF:FF)
// w/ NONOS-SDK of espressif // always broadcasting. everyone is 'talkative'.
// and you can enable that w/ Platformio, applying some special build flags.
// --> https://github.com/esp8266/Arduino/issues/6174#issuecomment-509115454
// (yet, w/ Arduino, this is not available yet.)
//
// so, at first, we will simply/stably go w/o broadcasting.
// and, if broadcast is really needed we can activate (@Platformio)
// //
// then, let is save a value in EEPROM (object with memory) // then, let is save a value in EEPROM (object with memory)
// no broadcast for now. if needed we can achieve that too.
@ -59,12 +52,6 @@
//============<parameters>============ //============<parameters>============
// //
// #define MY_BOOK ("root")
// #define MY_BOOK ("friend")
#define MY_BOOK ("sampler")
//
#define PEER_COUNT_MAX (20)
//
#define LED_PERIOD (11111) #define LED_PERIOD (11111)
#define LED_ONTIME (1) #define LED_ONTIME (1)
#define LED_GAPTIME (222) #define LED_GAPTIME (222)
@ -99,7 +86,6 @@
//post & addresses //post & addresses
#include "../../post.h" #include "../../post.h"
AddressLibrary library;
//espnow //espnow
#include <ESP8266WiFi.h> #include <ESP8266WiFi.h>
@ -252,16 +238,6 @@ void setup() {
#if defined(DISABLE_AP) #if defined(DISABLE_AP)
Serial.println("- ======== 'DISABLE_AP' ========"); Serial.println("- ======== 'DISABLE_AP' ========");
#endif #endif
Serial.println("-");
Serial.println("- * address library >>>");
for (uint32_t j = 0; j < library.lib.size(); j++) {
Serial.println("-");
Serial.println("- * (" + String(j + 1) + ") - \"" + library.lib[j].title + "\" >>>");
Serial.println("-");
for (uint32_t i = 0; i < library.lib[j].list.size(); i++) {
Serial.println("- " + library.lib[j].list[i].to_string());
}
}
Serial.println("-"); Serial.println("-");
Serial.println("\".-.-.-. :)\""); Serial.println("\".-.-.-. :)\"");
Serial.println(); Serial.println();
@ -282,43 +258,13 @@ void setup() {
esp_now_set_self_role(ESP_NOW_ROLE_COMBO); esp_now_set_self_role(ESP_NOW_ROLE_COMBO);
esp_now_register_send_cb(onDataSent); esp_now_register_send_cb(onDataSent);
esp_now_register_recv_cb(onDataReceive); esp_now_register_recv_cb(onDataReceive);
//
Serial.println("-");
Serial.println("- we will broadcast everything. ==> add only the 'broadcast peer' (FF:FF:FF:FF:FF:FF).");
uint8_t broadcastmac[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
esp_now_add_peer(broadcastmac, ESP_NOW_ROLE_COMBO, 1, NULL, 0);
// //
AddressBook* members = library.getBookByTitle(MY_BOOK);
Serial.println("! registering peers in the book titled: \"" + String(MY_BOOK) + "\"");
//
if (members == NULL) {
//oh, no such book!
Serial.println("---- :( oh, no such book! ===> " + String(MY_BOOK));
Serial.println(" .... no peer will be registered. come back with different 'title' !");
} else {
Serial.println("---- :) oki-doki, found it!");
Serial.println();
//
for (uint32_t i = 0; i < members->list.size(); i++) {
if (i >= PEER_COUNT_MAX) {
Serial.println("(!) @@@@ Hey, no more free-slot. @@@@ ==> " + members->list[i].to_string() + " ==> IGNORED :(");
} else {
//some decoration?
Serial.print("" + String((i + 1)%10) + "_ ");
for (uint32_t k = 0; k < i; k++) Serial.print(" ");
//
Serial.println("~~>> 'esp_now_add_peer' with ... " + members->list[i].to_string());
esp_now_add_peer(members->list[i].mac, ESP_NOW_ROLE_COMBO, 1, NULL, 0); // <-- '1' : "Channel does not affect any function" ... *.-a
//
// int esp_now_add_peer(u8 *mac_addr, u8 role, u8 channel, u8 *key, u8 key_len)
// - https://www.espressif.com/sites/default/files/documentation/2c-esp8266_non_os_sdk_api_reference_en.pdf
//
// "Channel does not affect any function, but only stores the channel information
// for the application layer. The value is defined by the application layer. For
// example, 0 means that the channel is not defined; 1 ~ 14 mean valid
// channels; all the rest values can be assigned functions that are specified
// by the application layer."
// - https://www.espressif.com/sites/default/files/documentation/esp-now_user_guide_en.pdf
}
}
}
Serial.println("-"); Serial.println("-");
Serial.println("\".-.-.-. :)\""); Serial.println("\".-.-.-. :)\"");
Serial.println(); Serial.println();

View file

@ -1,4 +1,4 @@
#N canvas 542 326 804 465 10; #N canvas 238 195 804 465 10;
#X obj 397 140 print CTRL; #X obj 397 140 print CTRL;
#X obj 397 82 r CTRL; #X obj 397 82 r CTRL;
#X obj 397 103 spigot; #X obj 397 103 spigot;
@ -10,16 +10,16 @@
#X obj 125 292 packOSC; #X obj 125 292 packOSC;
#X obj 125 267 r OSC2; #X obj 125 267 r OSC2;
#X obj 317 103 spigot; #X obj 317 103 spigot;
#X obj 366 88 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 #X obj 366 88 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1
1; 1;
#X obj 317 82 r OSC2; #X obj 317 82 r OSC2;
#X obj 317 140 print OSC2; #X obj 317 140 print OSC2;
#N canvas 196 89 718 806 crickets 0; #N canvas 0 89 1440 811 crickets 1;
#X obj 129 363 pack f f; #X obj 129 363 pack f f;
#X obj 175 185 tgl 20 0 empty empty 120 17 7 0 10 -257985 -1 -1 0 1 #X obj 175 185 tgl 20 0 empty empty 120 17 7 0 10 -257985 -1 -1 0 1
; ;
#X obj 91 289 hsl 128 15 0 300 0 0 empty empty empty -2 -8 0 10 -262144 #X obj 91 289 hsl 128 15 0 300 0 0 empty empty empty -2 -8 0 10 -262144
-1 -1 0 1; -1 -1 4032 1;
#X floatatom 139 311 5 0 0 0 - - -; #X floatatom 139 311 5 0 0 0 - - -;
#X obj 1077 528 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 #X obj 1077 528 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1
0 1; 0 1;
@ -94,7 +94,7 @@
#X obj 114 701 t b a; #X obj 114 701 t b a;
#X obj 32 248 f; #X obj 32 248 f;
#X obj 32 269 + 1; #X obj 32 269 + 1;
#X obj 32 186 tgl 20 0 empty empty empty 17 7 0 10 -262130 -1 -1 0 #X obj 32 186 tgl 20 0 empty empty empty 17 7 0 10 -262130 -1 -1 1
1; 1;
#X floatatom 31 366 5 0 0 0 - - -; #X floatatom 31 366 5 0 0 0 - - -;
#X floatatom 31 407 5 0 0 0 - - -; #X floatatom 31 407 5 0 0 0 - - -;
@ -190,7 +190,7 @@
#X obj 591 183 tgl 20 0 empty empty 122 17 7 0 10 -257985 -1 -1 0 1 #X obj 591 183 tgl 20 0 empty empty 122 17 7 0 10 -257985 -1 -1 0 1
; ;
#X obj 507 287 hsl 128 15 0 300 0 0 empty empty empty -2 -8 0 10 -262144 #X obj 507 287 hsl 128 15 0 300 0 0 empty empty empty -2 -8 0 10 -262144
-1 -1 0 1; -1 -1 4193 1;
#X floatatom 555 309 5 0 0 0 - - -; #X floatatom 555 309 5 0 0 0 - - -;
#X obj 545 405 s CTRL; #X obj 545 405 s CTRL;
#X obj 448 246 f; #X obj 448 246 f;
@ -265,10 +265,10 @@
#X obj 40 668 + 1; #X obj 40 668 + 1;
#X obj 39 629 metro 1000; #X obj 39 629 metro 1000;
#X obj 752 357 pack f f; #X obj 752 357 pack f f;
#X obj 798 179 tgl 20 0 empty empty 123 17 7 0 10 -257985 -1 -1 0 1 #X obj 798 179 tgl 20 0 empty empty 123 17 7 0 10 -257985 -1 -1 1 1
; ;
#X obj 714 283 hsl 128 15 0 300 0 0 empty empty empty -2 -8 0 10 -262144 #X obj 714 283 hsl 128 15 0 300 0 0 empty empty empty -2 -8 0 10 -262144
-1 -1 0 1; -1 -1 3064 1;
#X floatatom 762 305 5 0 0 0 - - -; #X floatatom 762 305 5 0 0 0 - - -;
#X obj 752 401 s CTRL; #X obj 752 401 s CTRL;
#X obj 655 242 f; #X obj 655 242 f;
@ -286,12 +286,12 @@
#X obj 1006 174 tgl 20 0 empty empty 124 17 7 0 10 -257985 -1 -1 0 #X obj 1006 174 tgl 20 0 empty empty 124 17 7 0 10 -257985 -1 -1 0
1; 1;
#X obj 922 278 hsl 128 15 0 300 0 0 empty empty empty -2 -8 0 10 -262144 #X obj 922 278 hsl 128 15 0 300 0 0 empty empty empty -2 -8 0 10 -262144
-1 -1 0 1; -1 -1 2258 1;
#X floatatom 970 300 5 0 0 0 - - -; #X floatatom 970 300 5 0 0 0 - - -;
#X obj 960 396 s CTRL; #X obj 960 396 s CTRL;
#X obj 863 237 f; #X obj 863 237 f;
#X obj 863 258 + 1; #X obj 863 258 + 1;
#X obj 863 175 tgl 20 0 empty empty empty 17 7 0 10 -262130 -1 -1 0 #X obj 863 175 tgl 20 0 empty empty empty 17 7 0 10 -262130 -1 -1 1
1; 1;
#X floatatom 862 355 5 0 0 0 - - -; #X floatatom 862 355 5 0 0 0 - - -;
#X floatatom 862 396 5 0 0 0 - - -; #X floatatom 862 396 5 0 0 0 - - -;
@ -307,13 +307,13 @@
#X obj 1216 171 tgl 20 0 empty empty 125 17 7 0 10 -257985 -1 -1 0 #X obj 1216 171 tgl 20 0 empty empty 125 17 7 0 10 -257985 -1 -1 0
1; 1;
#X obj 1132 275 hsl 128 15 0 300 0 0 empty empty empty -2 -8 0 10 -262144 #X obj 1132 275 hsl 128 15 0 300 0 0 empty empty empty -2 -8 0 10 -262144
-1 -1 0 1; -1 -1 9434 1;
#X floatatom 1180 297 5 0 0 0 - - -; #X floatatom 1180 297 5 0 0 0 - - -;
#X obj 1170 393 s CTRL; #X obj 1170 393 s CTRL;
#X obj 1073 234 f; #X obj 1073 234 f;
#X obj 1073 255 + 1; #X obj 1073 255 + 1;
#X obj 1073 172 tgl 20 0 empty empty empty 17 7 0 10 -262130 -1 -1 #X obj 1073 172 tgl 20 0 empty empty empty 17 7 0 10 -262130 -1 -1
0 1; 1 1;
#X floatatom 1072 352 5 0 0 0 - - -; #X floatatom 1072 352 5 0 0 0 - - -;
#X floatatom 1072 393 5 0 0 0 - - -; #X floatatom 1072 393 5 0 0 0 - - -;
#X floatatom 1073 297 5 0 0 0 - - -; #X floatatom 1073 297 5 0 0 0 - - -;
@ -344,13 +344,13 @@
#X obj 1364 392 tgl 20 0 empty empty 125 17 7 0 10 -257985 -1 -1 0 #X obj 1364 392 tgl 20 0 empty empty 125 17 7 0 10 -257985 -1 -1 0
1; 1;
#X obj 1280 496 hsl 128 15 0 300 0 0 empty empty empty -2 -8 0 10 -262144 #X obj 1280 496 hsl 128 15 0 300 0 0 empty empty empty -2 -8 0 10 -262144
-1 -1 0 1; -1 -1 12700 1;
#X floatatom 1328 518 5 0 0 0 - - -; #X floatatom 1328 518 5 0 0 0 - - -;
#X obj 1318 614 s CTRL; #X obj 1318 614 s CTRL;
#X obj 1221 455 f; #X obj 1221 455 f;
#X obj 1221 476 + 1; #X obj 1221 476 + 1;
#X obj 1221 393 tgl 20 0 empty empty empty 17 7 0 10 -262130 -1 -1 #X obj 1221 393 tgl 20 0 empty empty empty 17 7 0 10 -262130 -1 -1
0 1; 1 1;
#X floatatom 1220 573 5 0 0 0 - - -; #X floatatom 1220 573 5 0 0 0 - - -;
#X floatatom 1220 614 5 0 0 0 - - -; #X floatatom 1220 614 5 0 0 0 - - -;
#X floatatom 1221 518 5 0 0 0 - - -; #X floatatom 1221 518 5 0 0 0 - - -;
@ -387,10 +387,8 @@
#X obj 538 764 * 300; #X obj 538 764 * 300;
#X obj 1221 497 mod 50; #X obj 1221 497 mod 50;
#X text 701 184 3 찌; #X text 701 184 3 찌;
#X obj 447 384 * 200;
#X text 491 187 2 찌; #X text 491 187 2 찌;
#X text 283 189 1 찌; #X text 283 189 1 찌;
#X obj 31 386 * 100;
#X text 907 181 가방진; #X text 907 181 가방진;
#X text 1121 177 노란이 1; #X text 1121 177 노란이 1;
#X text 1271 395 노란이 2; #X text 1271 395 노란이 2;
@ -526,12 +524,10 @@
#X msg 364 971 154 50 1; #X msg 364 971 154 50 1;
#X obj 364 932 metro 500; #X obj 364 932 metro 500;
#X msg 49 1081 1002 0 1; #X msg 49 1081 1002 0 1;
#X obj 1072 372 * 800;
#X obj 1220 593 * 1200; #X obj 1220 593 * 1200;
#X obj 721 802 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 #X obj 721 802 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
-1 -1; -1 -1;
#X obj 638 788 * 50; #X obj 638 788 * 50;
#X obj 641 618 metro 50;
#X obj 1520 978 s CTRL; #X obj 1520 978 s CTRL;
#X obj 1494 723 f; #X obj 1494 723 f;
#X obj 1494 744 + 1; #X obj 1494 744 + 1;
@ -558,6 +554,10 @@
#X text 1865 1168 >>>; #X text 1865 1168 >>>;
#X obj 539 615 metro 1000; #X obj 539 615 metro 1000;
#X floatatom 587 842 5 0 0 0 - - -; #X floatatom 587 842 5 0 0 0 - - -;
#X obj 31 386 * 400;
#X obj 641 618 metro 500;
#X obj 447 384 * 800;
#X obj 1092 372 * 600;
#X connect 0 0 72 0; #X connect 0 0 72 0;
#X connect 1 0 0 1; #X connect 1 0 0 1;
#X connect 2 0 0 0; #X connect 2 0 0 0;
@ -591,7 +591,7 @@
#X connect 39 0 38 1; #X connect 39 0 38 1;
#X connect 39 0 119 0; #X connect 39 0 119 0;
#X connect 40 0 44 0; #X connect 40 0 44 0;
#X connect 41 0 228 0; #X connect 41 0 367 0;
#X connect 42 0 2 0; #X connect 42 0 2 0;
#X connect 43 0 87 0; #X connect 43 0 87 0;
#X connect 44 0 38 0; #X connect 44 0 38 0;
@ -608,7 +608,7 @@
#X connect 64 0 63 1; #X connect 64 0 63 1;
#X connect 64 0 70 0; #X connect 64 0 70 0;
#X connect 65 0 69 0; #X connect 65 0 69 0;
#X connect 66 0 343 0; #X connect 66 0 341 0;
#X connect 67 0 59 0; #X connect 67 0 59 0;
#X connect 68 0 62 0; #X connect 68 0 62 0;
#X connect 69 0 63 0; #X connect 69 0 63 0;
@ -623,7 +623,7 @@
#X connect 79 0 78 1; #X connect 79 0 78 1;
#X connect 79 0 120 0; #X connect 79 0 120 0;
#X connect 80 0 84 0; #X connect 80 0 84 0;
#X connect 81 0 225 0; #X connect 81 0 369 0;
#X connect 82 0 75 0; #X connect 82 0 75 0;
#X connect 83 0 86 0; #X connect 83 0 86 0;
#X connect 84 0 78 0; #X connect 84 0 78 0;
@ -637,7 +637,7 @@
#X connect 96 0 97 0; #X connect 96 0 97 0;
#X connect 97 0 96 1; #X connect 97 0 96 1;
#X connect 97 0 106 0; #X connect 97 0 106 0;
#X connect 98 0 243 0; #X connect 98 0 241 0;
#X connect 99 0 173 0; #X connect 99 0 173 0;
#X connect 100 0 93 0; #X connect 100 0 93 0;
#X connect 101 0 107 0; #X connect 101 0 107 0;
@ -653,7 +653,7 @@
#X connect 111 0 112 0; #X connect 111 0 112 0;
#X connect 112 0 111 1; #X connect 112 0 111 1;
#X connect 112 0 154 0; #X connect 112 0 154 0;
#X connect 113 0 369 0; #X connect 113 0 365 0;
#X connect 114 0 118 0; #X connect 114 0 118 0;
#X connect 115 0 153 0; #X connect 115 0 153 0;
#X connect 116 0 114 0; #X connect 116 0 114 0;
@ -704,7 +704,7 @@
#X connect 162 0 161 1; #X connect 162 0 161 1;
#X connect 162 0 168 0; #X connect 162 0 168 0;
#X connect 163 0 167 0; #X connect 163 0 167 0;
#X connect 164 0 347 0; #X connect 164 0 370 0;
#X connect 165 0 158 0; #X connect 165 0 158 0;
#X connect 166 0 169 0; #X connect 166 0 169 0;
#X connect 167 0 161 0; #X connect 167 0 161 0;
@ -738,7 +738,7 @@
#X connect 194 0 193 1; #X connect 194 0 193 1;
#X connect 194 0 223 0; #X connect 194 0 223 0;
#X connect 195 0 199 0; #X connect 195 0 199 0;
#X connect 196 0 348 0; #X connect 196 0 345 0;
#X connect 197 0 190 0; #X connect 197 0 190 0;
#X connect 198 0 200 0; #X connect 198 0 200 0;
#X connect 199 0 193 0; #X connect 199 0 193 0;
@ -747,10 +747,10 @@
#X connect 203 0 204 0; #X connect 203 0 204 0;
#X connect 204 0 203 1; #X connect 204 0 203 1;
#X connect 204 0 215 0; #X connect 204 0 215 0;
#X connect 205 0 351 0; #X connect 205 0 368 0;
#X connect 206 0 210 0; #X connect 206 0 210 0;
#X connect 207 0 214 0; #X connect 207 0 214 0;
#X connect 208 0 350 0; #X connect 208 0 347 0;
#X connect 209 0 208 0; #X connect 209 0 208 0;
#X connect 210 1 211 0; #X connect 210 1 211 0;
#X connect 211 0 212 0; #X connect 211 0 212 0;
@ -764,137 +764,137 @@
#X connect 221 0 184 0; #X connect 221 0 184 0;
#X connect 222 0 116 0; #X connect 222 0 116 0;
#X connect 223 0 198 0; #X connect 223 0 198 0;
#X connect 225 0 82 0; #X connect 232 0 233 0;
#X connect 228 0 42 0; #X connect 233 0 232 1;
#X connect 234 0 235 0; #X connect 233 0 237 0;
#X connect 235 0 234 1; #X connect 234 0 238 0;
#X connect 235 0 239 0; #X connect 235 0 236 0;
#X connect 236 0 240 0; #X connect 237 0 235 0;
#X connect 237 0 238 0; #X connect 238 0 232 0;
#X connect 239 0 237 0; #X connect 239 0 240 0;
#X connect 240 0 234 0; #X connect 240 0 231 0;
#X connect 241 0 242 0; #X connect 241 0 96 0;
#X connect 242 0 233 0; #X connect 243 0 244 0;
#X connect 243 0 96 0; #X connect 244 0 242 0;
#X connect 245 0 246 0; #X connect 246 0 256 0;
#X connect 246 0 244 0; #X connect 247 0 248 0;
#X connect 248 0 258 0; #X connect 248 0 249 0;
#X connect 249 0 250 0; #X connect 249 0 250 0;
#X connect 249 0 247 1;
#X connect 250 0 251 0; #X connect 250 0 251 0;
#X connect 251 0 252 0; #X connect 251 0 293 0;
#X connect 251 0 249 1; #X connect 251 1 294 0;
#X connect 252 0 253 0; #X connect 254 0 252 0;
#X connect 253 0 295 0; #X connect 255 0 253 0;
#X connect 253 1 296 0; #X connect 256 0 258 0;
#X connect 256 0 254 0; #X connect 257 0 260 0;
#X connect 257 0 255 0; #X connect 258 0 344 0;
#X connect 258 0 260 0; #X connect 258 1 247 0;
#X connect 259 0 262 0; #X connect 258 2 255 0;
#X connect 260 0 346 0; #X connect 258 3 257 0;
#X connect 260 1 249 0; #X connect 259 0 257 0;
#X connect 260 2 257 0; #X connect 266 0 336 0;
#X connect 260 3 259 0; #X connect 267 0 268 0;
#X connect 261 0 259 0; #X connect 268 0 335 0;
#X connect 268 0 338 0; #X connect 269 0 337 0;
#X connect 269 0 270 0; #X connect 272 0 270 0;
#X connect 270 0 337 0; #X connect 273 0 271 0;
#X connect 271 0 339 0; #X connect 274 0 276 0;
#X connect 274 0 272 0; #X connect 275 0 320 0;
#X connect 275 0 273 0; #X connect 275 1 267 0;
#X connect 276 0 278 0; #X connect 275 2 273 0;
#X connect 277 0 322 0; #X connect 275 3 274 0;
#X connect 277 1 269 0; #X connect 281 0 274 0;
#X connect 277 2 275 0; #X connect 283 0 282 0;
#X connect 277 3 276 0; #X connect 285 0 288 1;
#X connect 283 0 276 0; #X connect 286 0 284 0;
#X connect 285 0 284 0; #X connect 286 0 283 0;
#X connect 287 0 290 1; #X connect 288 0 287 0;
#X connect 288 0 286 0; #X connect 289 0 286 0;
#X connect 288 0 285 0;
#X connect 290 0 289 0; #X connect 290 0 289 0;
#X connect 291 0 288 0; #X connect 291 0 288 0;
#X connect 292 0 291 0; #X connect 292 0 255 0;
#X connect 293 0 290 0; #X connect 293 0 254 0;
#X connect 294 0 257 0; #X connect 294 0 254 0;
#X connect 295 0 256 0; #X connect 296 0 298 0;
#X connect 296 0 256 0; #X connect 297 0 310 0;
#X connect 298 0 299 0;
#X connect 298 0 300 0; #X connect 298 0 300 0;
#X connect 299 0 312 0; #X connect 299 0 298 1;
#X connect 300 0 301 0; #X connect 300 0 315 0;
#X connect 300 0 302 0; #X connect 301 0 302 0;
#X connect 301 0 300 1; #X connect 301 0 309 0;
#X connect 302 0 317 0; #X connect 302 0 301 1;
#X connect 303 0 304 0; #X connect 303 0 316 0;
#X connect 303 0 311 0; #X connect 304 0 305 0;
#X connect 304 0 303 1; #X connect 305 0 290 0;
#X connect 305 0 318 0; #X connect 307 0 317 0;
#X connect 306 0 307 0; #X connect 307 1 306 1;
#X connect 307 0 292 0; #X connect 308 0 307 0;
#X connect 309 0 319 0; #X connect 309 0 304 0;
#X connect 309 1 308 1; #X connect 310 0 296 0;
#X connect 310 0 309 0; #X connect 310 1 311 0;
#X connect 311 0 306 0; #X connect 311 0 298 0;
#X connect 312 0 298 0; #X connect 312 0 313 0;
#X connect 312 1 313 0; #X connect 313 0 344 0;
#X connect 313 0 300 0; #X connect 313 1 254 0;
#X connect 314 0 315 0; #X connect 313 2 257 0;
#X connect 315 0 346 0; #X connect 313 3 255 0;
#X connect 315 1 256 0; #X connect 314 0 301 0;
#X connect 315 2 259 0; #X connect 315 0 308 0;
#X connect 315 3 257 0; #X connect 316 0 301 0;
#X connect 316 0 303 0; #X connect 317 0 306 0;
#X connect 317 0 310 0; #X connect 320 0 265 0;
#X connect 318 0 303 0; #X connect 321 0 322 0;
#X connect 319 0 308 0;
#X connect 322 0 267 0;
#X connect 323 0 324 0; #X connect 323 0 324 0;
#X connect 324 0 320 0;
#X connect 324 1 272 0;
#X connect 324 2 274 0;
#X connect 324 3 273 0;
#X connect 325 0 326 0; #X connect 325 0 326 0;
#X connect 326 0 322 0; #X connect 326 0 327 0;
#X connect 326 1 274 0;
#X connect 326 2 276 0;
#X connect 326 3 275 0;
#X connect 327 0 328 0; #X connect 327 0 328 0;
#X connect 328 0 329 0; #X connect 327 1 329 0;
#X connect 329 0 330 0; #X connect 328 0 330 0;
#X connect 329 1 331 0; #X connect 328 0 332 0;
#X connect 330 0 332 0; #X connect 334 0 343 0;
#X connect 330 0 334 0; #X connect 335 0 269 0;
#X connect 336 0 345 0; #X connect 335 0 267 1;
#X connect 337 0 271 0; #X connect 336 0 275 0;
#X connect 337 0 269 1; #X connect 337 0 338 0;
#X connect 338 0 277 0; #X connect 337 1 340 0;
#X connect 339 0 340 0; #X connect 338 0 272 0;
#X connect 339 1 342 0; #X connect 339 0 272 0;
#X connect 340 0 274 0; #X connect 340 0 272 0;
#X connect 341 0 274 0; #X connect 341 0 67 0;
#X connect 342 0 274 0; #X connect 342 0 333 0;
#X connect 343 0 67 0; #X connect 343 0 342 0;
#X connect 344 0 335 0; #X connect 344 0 245 0;
#X connect 345 0 344 0; #X connect 345 0 197 0;
#X connect 346 0 247 0; #X connect 346 0 211 0;
#X connect 347 0 165 0; #X connect 347 0 206 0;
#X connect 348 0 197 0; #X connect 349 0 350 0;
#X connect 349 0 211 0; #X connect 350 0 349 1;
#X connect 350 0 206 0; #X connect 350 0 358 0;
#X connect 351 0 203 0; #X connect 351 0 363 0;
#X connect 353 0 354 0; #X connect 352 0 356 0;
#X connect 354 0 353 1; #X connect 353 0 361 0;
#X connect 354 0 362 0; #X connect 354 0 352 0;
#X connect 355 0 367 0; #X connect 355 0 359 0;
#X connect 356 0 360 0; #X connect 356 1 357 0;
#X connect 357 0 365 0; #X connect 357 0 362 0;
#X connect 358 0 356 0; #X connect 358 0 353 0;
#X connect 359 0 363 0; #X connect 359 0 354 0;
#X connect 360 1 361 0; #X connect 361 0 355 0;
#X connect 361 0 366 0; #X connect 362 0 348 0;
#X connect 362 0 357 0; #X connect 363 0 349 0;
#X connect 363 0 358 0; #X connect 365 0 111 0;
#X connect 365 0 359 0; #X connect 365 0 366 0;
#X connect 366 0 352 0; #X connect 366 0 50 0;
#X connect 367 0 353 0; #X connect 367 0 42 0;
#X connect 369 0 111 0; #X connect 368 0 203 0;
#X connect 369 0 370 0; #X connect 369 0 82 0;
#X connect 370 0 50 0; #X connect 370 0 165 0;
#X restore 261 206 pd crickets nanokontrol2; #X restore 261 206 pd crickets nanokontrol2;
#X text 576 69 /pitch /velocity /onoff; #X text 576 69 /pitch /velocity /onoff;
#X obj 530 69 r CTRL; #X obj 530 69 r CTRL;
@ -964,7 +964,7 @@ pollintervall 1 \, verbose 1;
#X obj 125 392 unpackOSC; #X obj 125 392 unpackOSC;
#X obj 125 415 routeOSC /hello; #X obj 125 415 routeOSC /hello;
#X obj 252 404 s HELLO; #X obj 252 404 s HELLO;
#N canvas 133 398 1214 393 roundly 0; #N canvas 133 398 1214 393 roundly 1;
#X floatatom 925 227 5 0 0 0 - - -; #X floatatom 925 227 5 0 0 0 - - -;
#X obj 925 249 s PS; #X obj 925 249 s PS;
#X msg 354 139 \$1 5000; #X msg 354 139 \$1 5000;
@ -987,7 +987,7 @@ pollintervall 1 \, verbose 1;
#X obj 253 209 s CTRL; #X obj 253 209 s CTRL;
#X floatatom 253 99 5 0 0 0 target_pos - -; #X floatatom 253 99 5 0 0 0 target_pos - -;
#X obj 97 31 hsl 1000 15 -50000 50000 0 0 empty empty empty -2 -8 0 #X obj 97 31 hsl 1000 15 -50000 50000 0 0 empty empty empty -2 -8 0
10 -260097 -262144 -1 49950 1; 10 -260097 -262144 -1 25950 1;
#X obj 97 51 hsl 1000 15 -50000 50000 0 0 empty empty empty -2 -8 0 #X obj 97 51 hsl 1000 15 -50000 50000 0 0 empty empty empty -2 -8 0
10 -13381 -262144 -1 49950 1; 10 -13381 -262144 -1 49950 1;
#X obj 253 121 t b a; #X obj 253 121 t b a;
@ -1111,7 +1111,7 @@ pollintervall 1 \, verbose 1;
#X restore 102 45 pd bluetooth-keyboard; #X restore 102 45 pd bluetooth-keyboard;
#X text 1 2 <<<; #X text 1 2 <<<;
#X text 401 2 >>>; #X text 401 2 >>>;
#N canvas 429 89 696 411 OSC-keyboard-samplers 1; #N canvas 699 114 696 411 OSC-keyboard-samplers 1;
#X obj 27 148 o.io.slipserial; #X obj 27 148 o.io.slipserial;
#X msg 56 97 devices; #X msg 56 97 devices;
#X msg 143 102 close; #X msg 143 102 close;
@ -1121,7 +1121,7 @@ pollintervall 1 \, verbose 1;
#X obj 591 82 print NOTE; #X obj 591 82 print NOTE;
#X obj 511 82 print OSC; #X obj 511 82 print OSC;
#X obj 511 55 spigot; #X obj 511 55 spigot;
#X obj 560 40 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 #X obj 560 40 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
1; 1;
#X msg 134 60 devicename /dev/tty.usbmodem48710501 \, baud 57600 \, #X msg 134 60 devicename /dev/tty.usbmodem48710501 \, baud 57600 \,
pollintervall 1 \, verbose 1; pollintervall 1 \, verbose 1;
@ -1146,7 +1146,7 @@ pollintervall 1 \, verbose 1;
#X text 193 296 BIG; #X text 193 296 BIG;
#X text 31 296 SMALL; #X text 31 296 SMALL;
#X obj 69 297 hradio 15 1 0 8 empty empty vol._override 0 -8 0 10 -257985 #X obj 69 297 hradio 15 1 0 8 empty empty vol._override 0 -8 0 10 -257985
-1 -1 3; -1 -1 4;
#X obj 69 320 tabread \$0-volume-list; #X obj 69 320 tabread \$0-volume-list;
#N canvas 817 360 501 420 volume-list 0; #N canvas 817 360 501 420 volume-list 0;
#X msg 146 359 \; \$1-volume-list 0 0 10 25 50 127 180 255 500; #X msg 146 359 \; \$1-volume-list 0 0 10 25 50 127 180 255 500;
@ -1251,7 +1251,7 @@ pollintervall 1 \, verbose 1;
#X restore 189 204 pd buildOSC; #X restore 189 204 pd buildOSC;
#X floatatom 243 240 5 0 0 3 r:0-vol #0-vol -; #X floatatom 243 240 5 0 0 3 r:0-vol #0-vol -;
#X obj 286 232 nbx 5 25 -1e+37 1e+37 0 0 empty empty volume-now 0 -12 #X obj 286 232 nbx 5 25 -1e+37 1e+37 0 0 empty empty volume-now 0 -12
0 20 -262130 -159808 -159808 50 256; 0 20 -262130 -159808 -159808 127 256;
#X msg 225 109 devicename /dev/ttyACM0 \, baud 57600 \, pollintervall #X msg 225 109 devicename /dev/ttyACM0 \, baud 57600 \, pollintervall
1 \, verbose 1; 1 \, verbose 1;
#X obj 541 212 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 #X obj 541 212 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0

View file

@ -9,6 +9,12 @@
// //
// 2021 02 15 // 2021 02 15
// //
// this module will be an esp-now node in a group.
// like, a bird in a group of birds.
//
// esp-now @ esp8266 w/ broadcast address (FF:FF:FF:FF:FF:FF)
// always broadcasting. everyone is 'talkative'.
//
//==========<configurations>=========== //==========<configurations>===========
// //
@ -32,39 +38,17 @@
#elif 0 #elif 0
#define SERIAL_SWAP #define SERIAL_SWAP
#define HAVE_CLIENT #define HAVE_CLIENT
// (3) sampler client
#elif 0
#define SERIAL_SWAP
#define HAVE_CLIENT
#define DISABLE_AP
// //
#endif #endif
// //
//==========</preset>========== //==========</preset>==========
//============<list of reserved keys>============
#define ROUNDLY_A_KEY 2000 // A-E-I-O-U-W-Y-N (up to 8 roundlys) - KEY 200 ~ 207
#define ROUNDLY_E_KEY 2001
#define ROUNDLY_I_KEY 2002
#define ROUNDLY_O_KEY 2003
#define ROUNDLY_U_KEY 2004
#define ROUNDLY_W_KEY 2005
#define ROUNDLY_Y_KEY 2006
#define ROUNDLY_N_KEY 2007
//============</list of reserved keys>===========
//============<identity key>============ //============<identity key>============
#define ID_KEY ROUNDLY_E_KEY #define ID_KEY 2000
//============</identity key>=========== //============</identity key>===========
//============<parameters>============ //============<parameters>============
// //
#define MY_BOOK ("root")
// #define MY_BOOK ("friend")
// #define MY_BOOK ("sampler")
//
#define PEER_COUNT_MAX (20)
//
#define LED_PERIOD (11111) #define LED_PERIOD (11111)
#define LED_ONTIME (1) #define LED_ONTIME (1)
#define LED_GAPTIME (222) #define LED_GAPTIME (222)
@ -99,7 +83,6 @@
//post & addresses //post & addresses
#include "../../post.h" #include "../../post.h"
AddressLibrary library;
//espnow //espnow
#include <ESP8266WiFi.h> #include <ESP8266WiFi.h>
@ -186,8 +169,6 @@ void hello() {
Hello hello = { Hello hello = {
ID_KEY, ID_KEY,
stepper.currentPosition(), stepper.currentPosition(),
stepper.distanceToGo(),
stepper.distanceToGo(),
stepper.distanceToGo() stepper.distanceToGo()
}; };
// //
@ -197,12 +178,10 @@ void hello() {
memcpy(frm + 1, (uint8_t *) &hello, sizeof(Hello)); memcpy(frm + 1, (uint8_t *) &hello, sizeof(Hello));
frm[frm_size - 1] = '}'; frm[frm_size - 1] = '}';
// //
//pseudo-broadcast using peer-list! esp_now_send(NULL, frm, frm_size); // just broadcast.
//
esp_now_send(AddressBook("root").list[0].mac, frm, frm_size);
// //
MONITORING_SERIAL.write(frm, frm_size); MONITORING_SERIAL.write(frm, frm_size);
MONITORING_SERIAL.println(" ==(esp_now_send/\"root\")==> "); MONITORING_SERIAL.println(" ==(esp_now_send/BROADCAST)==> ");
// //
if (hello_delay > 0) { if (hello_delay > 0) {
if (hello_delay < 100) hello_delay = 100; if (hello_delay < 100) hello_delay = 100;
@ -316,16 +295,6 @@ void setup() {
#if defined(DISABLE_AP) #if defined(DISABLE_AP)
Serial.println("- ======== 'DISABLE_AP' ========"); Serial.println("- ======== 'DISABLE_AP' ========");
#endif #endif
Serial.println("-");
Serial.println("- * address library >>>");
for (uint32_t j = 0; j < library.lib.size(); j++) {
Serial.println("-");
Serial.println("- * (" + String(j + 1) + ") - \"" + library.lib[j].title + "\" >>>");
Serial.println("-");
for (uint32_t i = 0; i < library.lib[j].list.size(); i++) {
Serial.println("- " + library.lib[j].list[i].to_string());
}
}
Serial.println("-"); Serial.println("-");
Serial.println("\".-.-.-. :)\""); Serial.println("\".-.-.-. :)\"");
Serial.println(); Serial.println();
@ -346,43 +315,13 @@ void setup() {
esp_now_set_self_role(ESP_NOW_ROLE_COMBO); esp_now_set_self_role(ESP_NOW_ROLE_COMBO);
esp_now_register_send_cb(onDataSent); esp_now_register_send_cb(onDataSent);
esp_now_register_recv_cb(onDataReceive); esp_now_register_recv_cb(onDataReceive);
//
Serial.println("-");
Serial.println("- we will broadcast everything. ==> add only the 'broadcast peer' (FF:FF:FF:FF:FF:FF).");
uint8_t broadcastmac[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
esp_now_add_peer(broadcastmac, ESP_NOW_ROLE_COMBO, 1, NULL, 0);
// //
AddressBook* members = library.getBookByTitle(MY_BOOK);
Serial.println("! registering peers in the book titled: \"" + String(MY_BOOK) + "\"");
//
if (members == NULL) {
//oh, no such book!
Serial.println("---- :( oh, no such book! ===> " + String(MY_BOOK));
Serial.println(" .... no peer will be registered. come back with different 'title' !");
} else {
Serial.println("---- :) oki-doki, found it!");
Serial.println();
//
for (uint32_t i = 0; i < members->list.size(); i++) {
if (i >= PEER_COUNT_MAX) {
Serial.println("(!) @@@@ Hey, no more free-slot. @@@@ ==> " + members->list[i].to_string() + " ==> IGNORED :(");
} else {
//some decoration?
Serial.print("" + String((i + 1)%10) + "_ ");
for (uint32_t k = 0; k < i; k++) Serial.print(" ");
//
Serial.println("~~>> 'esp_now_add_peer' with ... " + members->list[i].to_string());
esp_now_add_peer(members->list[i].mac, ESP_NOW_ROLE_COMBO, 1, NULL, 0); // <-- '1' : "Channel does not affect any function" ... *.-a
//
// int esp_now_add_peer(u8 *mac_addr, u8 role, u8 channel, u8 *key, u8 key_len)
// - https://www.espressif.com/sites/default/files/documentation/2c-esp8266_non_os_sdk_api_reference_en.pdf
//
// "Channel does not affect any function, but only stores the channel information
// for the application layer. The value is defined by the application layer. For
// example, 0 means that the channel is not defined; 1 ~ 14 mean valid
// channels; all the rest values can be assigned functions that are specified
// by the application layer."
// - https://www.espressif.com/sites/default/files/documentation/esp-now_user_guide_en.pdf
}
}
}
Serial.println("-"); Serial.println("-");
Serial.println("\".-.-.-. :)\""); Serial.println("\".-.-.-. :)\"");
Serial.println(); Serial.println();
@ -414,9 +353,9 @@ void setup() {
#endif #endif
//tasks //tasks
runner.addTask(hello_task);
runner.addTask(stepping_task); runner.addTask(stepping_task);
runner.addTask(rest_task); runner.addTask(rest_task);
runner.addTask(hello_task);
rest_task.restartDelayed(500); rest_task.restartDelayed(500);
} }

View file

@ -9,6 +9,12 @@
// //
// 2021 02 15 // 2021 02 15
// //
// this module will be an esp-now node in a group.
// like, a bird in a group of birds.
//
// esp-now @ esp8266 w/ broadcast address (FF:FF:FF:FF:FF:FF)
// always broadcasting. everyone is 'talkative'.
//
//==========<configurations>=========== //==========<configurations>===========
// //
@ -42,29 +48,12 @@
// //
//==========</preset>========== //==========</preset>==========
//============<list of reserved keys>============
#define TAAK_A_KEY 150 //solenoid
#define TAAK_E_KEY 151 //valve
#define TAAK_I_KEY 152
#define TAAK_O_KEY 153
#define TAAK_U_KEY 154
#define TAAK_W_KEY 155
#define TAAK_Y_KEY 156
#define TAAK_N_KEY 157
//============</list of reserved keys>===========
//============<identity key>============ //============<identity key>============
#define ID_KEY 151 #define ID_KEY 151
//============</identity key>=========== //============</identity key>===========
//============<parameters>============ //============<parameters>============
// //
#define MY_BOOK ("root")
// #define MY_BOOK ("friend")
// #define MY_BOOK ("sampler")
//
#define PEER_COUNT_MAX (20)
//
#define LED_PERIOD (11111) #define LED_PERIOD (11111)
#define LED_ONTIME (1) #define LED_ONTIME (1)
#define LED_GAPTIME (222) #define LED_GAPTIME (222)
@ -99,7 +88,6 @@
//post & addresses //post & addresses
#include "../../post.h" #include "../../post.h"
AddressLibrary library;
//espnow //espnow
#include <ESP8266WiFi.h> #include <ESP8266WiFi.h>
@ -123,6 +111,33 @@ void taak_off() {
Task taak_off_task(0, TASK_ONCE, &taak_off); Task taak_off_task(0, TASK_ONCE, &taak_off);
//*-*-*-*-*-*-*-*-*-*-*-*-* //*-*-*-*-*-*-*-*-*-*-*-*-*
//
extern Task hello_task;
static int hello_delay = 0;
void hello() {
//
Hello hello = {
ID_KEY
};
//
uint8_t frm_size = sizeof(Hello) + 2;
uint8_t frm[frm_size];
frm[0] = '{';
memcpy(frm + 1, (uint8_t *) &hello, sizeof(Hello));
frm[frm_size - 1] = '}';
//
esp_now_send(NULL, frm, frm_size); // just broadcast.
//
MONITORING_SERIAL.write(frm, frm_size);
MONITORING_SERIAL.println(" ==(esp_now_send/BROADCAST)==> ");
//
if (hello_delay > 0) {
if (hello_delay < 100) hello_delay = 100;
hello_task.restartDelayed(hello_delay);
}
}
Task hello_task(0, TASK_ONCE, &hello);
//task #0 : blink led //task #0 : blink led
extern Task blink_task; extern Task blink_task;
void blink() { void blink() {
@ -151,70 +166,6 @@ void blink() {
} }
Task blink_task(0, TASK_FOREVER, &blink, &runner, true); // -> ENABLED, at start-up. Task blink_task(0, TASK_FOREVER, &blink, &runner, true); // -> ENABLED, at start-up.
//task #1 : regular post collection
#if defined(HAVE_CLIENT)
void collect_post() {
//
//postman (serial comm.)
static bool insync = false;
if (insync == false) {
while (Serial.available() > 0) {
// search the last byte
char last = Serial.read();
// expectable last of the messages
if (last == ']' || last == '}') {
insync = true;
}
}
} else {
//
if (Serial.available() > 0) {
//
char type = Serial.peek();
//
if (type == '[') {
//expecting a Note message.
uint8_t frm_size = sizeof(Note) + 2;
//
if (Serial.available() >= frm_size) {
//
uint8_t frm[frm_size];
//
Serial.readBytes(frm, frm_size);
char first = frm[0];
char last = frm[frm_size - 1];
if (first == '[' && last == ']') {
//
//good. ==> ok, post it.
//
//pseudo-broadcast using addressbook!
//
for (uint32_t i = 0; i < members.list.size(); i++) {
esp_now_send(members.list[i].mac, frm, frm_size);
//
MONITORING_SERIAL.write(frm, frm_size);
MONITORING_SERIAL.print(" ==(esp_now_send)==> ");
//
MONITORING_SERIAL.print(members.list[i].mac[0], HEX);
for (int j = 1; j < 6; j++) {
MONITORING_SERIAL.print(":");
MONITORING_SERIAL.print(members.list[i].mac[j], HEX);
}
MONITORING_SERIAL.print(" ==> " + members.list[i].name);
//
}
//
} else {
insync = false; //error!
}
}
}
}
}
}
Task collect_post_task(1, TASK_FOREVER, &collect_post, &runner, true); // by default, ENABLED
#endif
// on 'Note' // on 'Note'
void onNoteHandler(Note & n) { void onNoteHandler(Note & n) {
//is it for me? //is it for me?
@ -294,16 +245,6 @@ void setup() {
#if defined(DISABLE_AP) #if defined(DISABLE_AP)
Serial.println("- ======== 'DISABLE_AP' ========"); Serial.println("- ======== 'DISABLE_AP' ========");
#endif #endif
Serial.println("-");
Serial.println("- * address library >>>");
for (uint32_t j = 0; j < library.lib.size(); j++) {
Serial.println("-");
Serial.println("- * (" + String(j + 1) + ") - \"" + library.lib[j].title + "\" >>>");
Serial.println("-");
for (uint32_t i = 0; i < library.lib[j].list.size(); i++) {
Serial.println("- " + library.lib[j].list[i].to_string());
}
}
Serial.println("-"); Serial.println("-");
Serial.println("\".-.-.-. :)\""); Serial.println("\".-.-.-. :)\"");
Serial.println(); Serial.println();
@ -324,43 +265,13 @@ void setup() {
esp_now_set_self_role(ESP_NOW_ROLE_COMBO); esp_now_set_self_role(ESP_NOW_ROLE_COMBO);
esp_now_register_send_cb(onDataSent); esp_now_register_send_cb(onDataSent);
esp_now_register_recv_cb(onDataReceive); esp_now_register_recv_cb(onDataReceive);
//
Serial.println("-");
Serial.println("- we will broadcast everything. ==> add only the 'broadcast peer' (FF:FF:FF:FF:FF:FF).");
uint8_t broadcastmac[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
esp_now_add_peer(broadcastmac, ESP_NOW_ROLE_COMBO, 1, NULL, 0);
// //
AddressBook* members = library.getBookByTitle(MY_BOOK);
Serial.println("! registering peers in the book titled: \"" + String(MY_BOOK) + "\"");
//
if (members == NULL) {
//oh, no such book!
Serial.println("---- :( oh, no such book! ===> " + String(MY_BOOK));
Serial.println(" .... no peer will be registered. come back with different 'title' !");
} else {
Serial.println("---- :) oki-doki, found it!");
Serial.println();
//
for (uint32_t i = 0; i < members->list.size(); i++) {
if (i >= PEER_COUNT_MAX) {
Serial.println("(!) @@@@ Hey, no more free-slot. @@@@ ==> " + members->list[i].to_string() + " ==> IGNORED :(");
} else {
//some decoration?
Serial.print("" + String((i + 1)%10) + "_ ");
for (uint32_t k = 0; k < i; k++) Serial.print(" ");
//
Serial.println("~~>> 'esp_now_add_peer' with ... " + members->list[i].to_string());
esp_now_add_peer(members->list[i].mac, ESP_NOW_ROLE_COMBO, 1, NULL, 0); // <-- '1' : "Channel does not affect any function" ... *.-a
//
// int esp_now_add_peer(u8 *mac_addr, u8 role, u8 channel, u8 *key, u8 key_len)
// - https://www.espressif.com/sites/default/files/documentation/2c-esp8266_non_os_sdk_api_reference_en.pdf
//
// "Channel does not affect any function, but only stores the channel information
// for the application layer. The value is defined by the application layer. For
// example, 0 means that the channel is not defined; 1 ~ 14 mean valid
// channels; all the rest values can be assigned functions that are specified
// by the application layer."
// - https://www.espressif.com/sites/default/files/documentation/esp-now_user_guide_en.pdf
}
}
}
Serial.println("-"); Serial.println("-");
Serial.println("\".-.-.-. :)\""); Serial.println("\".-.-.-. :)\"");
Serial.println(); Serial.println();
@ -383,6 +294,7 @@ void setup() {
pinMode(D6, OUTPUT); pinMode(D6, OUTPUT);
//tasks //tasks
runner.addTask(hello_task);
runner.addTask(taak_on_task); runner.addTask(taak_on_task);
runner.addTask(taak_off_task); runner.addTask(taak_off_task);
} }