Мазмуну:
- Жабдуулар
- 1 -кадам: Board Mac дарегин алыңыз
- 2-кадам: ESP-NOW кантип иштейт
- 3-кадам: ESP-NOW ФУНКЦИЯЛАРЫ (ESP32)
- 4-кадам: ESP-NOW ФУНКЦИЯЛАРЫ (ESP8266)
- 5 -кадам: Бир тараптуу байланыш (ESP32 жөнөтүүчү катары)
- 6 -кадам: Бир тараптуу байланыш (ESP8266 жөнөтүүчү катары)
- 7 -кадам: ЭКИ ЖОЛ БАЙЛАНЫШ
- 8 -кадам: АДАБИЯТТАР
Video: Кантип ESP32 менен ESP8266 аркылуу ESP-NOW аркылуу бир нече ESP сүйлөшүүлөрүн жасоо керек: 8 кадам
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:39
Менин иштеп жаткан долбоорумда, роутерсиз бири -бири менен сүйлөшүү үчүн мага бир нече ESP керек. Бул үчүн мен ESP-NOW аркылуу ESP роутери жок бири-бири менен зымсыз байланыш түзүү үчүн колдонуп жатам.
Жабдуулар
Мен колдонгон нерселер:
ESP32 DEV модулу
NODEMCU 1.0 (ESP12E модулу)
1 -кадам: Board Mac дарегин алыңыз
ESP-now аркылуу, ESP түзмөктөрү өзүлөрүнүн уникалдуу даректерине маалыматтарды жөнөтүү аркылуу сүйлөшүп, учурда espти интиляциялоодо жасалган ички кирүү түйүнүнүн тармагына туташып турат.. Ошентип, ар бир түзмөктүн MAC дарегин аныктаңыз. Менин ESP32 жана ESP8266 такталарым орнотулган
ESP32 үчүн
#include "WiFi.h" // ESP32 WIFI мүмкүнчүлүктөрүнө жетүү үчүн
void setup () {Serial.begin (115200); Serial.print ("ESP32 Board MAC дареги:"); Serial.println (WiFi.macAddress ()); // өзүнүн MAC дарегин басып чыгарат} void loop () {}
ESP8266 үчүн
#include // ESP8266 WIFI мүмкүнчүлүктөрүнө жетүү үчүн колдонулган китепкана
void setup () {Serial.begin (115200); Serial.println (); Serial.print ("ESP8266 Board MAC дареги:"); Serial.println (WiFi.macAddress ()); // өзүнүн MAC дарегин басып чыгарат} void loop () {}
Менин MAC дарегим:
- ESP32 - 30: AE: A4: F5: 03: A4
- ESP8266: A4: CF: 12: C7: 9C: 77
2-кадам: ESP-NOW кантип иштейт
Бул жерде анын кантип иштээри жөнүндө жалпы маалымат:
- Азыр esp жана wifi китепканаларын кошуңуз
- Алуучунун ESPнин Mac дарегин сактаңыз
- Жөнөтүү/алуу билдирүүсүнүн маалымат структурасын аныктаңыз
- Орнотууда wifi'ны станция режимине коюңуз
- Esp_now баштоо
- маалыматтарды жөнөтүүдөн жана алгандан кийин чакырылган кайра чалуу функциясын жасоо жана каттоо
- Esp8266 үчүн анын ролун аныктаңыз
- теңтушту же алуучуну каттоо
- Дайындарды жөнөтүү
3-кадам: ESP-NOW ФУНКЦИЯЛАРЫ (ESP32)
esp_now_init (жараксыз)
Кайтуу:
- ESP_OK: ийгиликтүү
- ESP_ERR_ESPNOW_INTERNAL: Ички ката
Description:
ESPNOW функциясын баштоо
esp_now_register_send_cb (cb)
Кайтаруулар:
- ESP_OK: ийгиликтүү
- ESP_ERR_ESPNOW_NOT_INIT: ESPNOW инициализацияланган эмес
- ESP_ERR_ESPNOW_INTERNAL: ички ката
Параметрлер:
-
cb: бул параметрлер менен ESPNOW маалыматын жөнөткөндөн кийин кайра чалуу функциясынын аталышы:
-
жараксыз cb (const uint8_t *mac_addr, esp_now_send_status_t абалы)
- mac_addr: алуучунун Mac дареги
-
статус:
- 1 = ийгилик
- 0 = ийгиликсиз
-
Description:
ESPNOW маалыматын жөнөткөндөн кийин OnDataSent функциясын чакырыңыз
esp_now_add_peerconst esp_now_peer_info_t *peer)
Кайтаруулар:
- ESP_OK: ийгиликтүү
- ESP_ERR_ESPNOW_NOT_INIT: ESPNOW инициализацияланган эмес
- ESP_ERR_ESPNOW_ARG: жараксыз аргумент
- ESP_ERR_ESPNOW_FULL: курдаштар тизмеси толук
- ESP_ERR_ESPNOW_NO_MEM: эс тутумда жок
- ESP_ERR_ESPNOW_EXIST: теңтуш бар
Параметрлер:
-
peer: peer маалыматы төмөнкү маалыматтар менен:
-
uint8_t
peer_addr [ESP_NOW_ETH_ALEN]; ESPNOW peer MAC дареги, бул станциянын же softapтын MAC дареги
-
uint8_t lmk [ESP_NOW_KEY_LEN]
ESPNOW маалыматты шифрлөө үчүн колдонулган жергиликтүү мастер ачкычы
-
uint8_t каналы
ESPNOW дайындарын жөнөтүү/алуу үчүн теңтуштар колдонуучу Wi-Fi каналы. Эгерде мааниси 0 болсо, учурдагы каналды колдонуңуз, бул станция же программалык камсыздоо. Болбосо, ал станция же программалык камсыздоо иштеп жаткан канал катары коюлушу керек
-
wifi_interface_t ifidx
Wi-Fi интерфейси ESPNOW маалыматын жөнөтүү/алуу үчүн колдонулат
-
bool шифрлөө
Бул теңтуш жөнөткөн/алган ESPNOW маалыматы шифрленген же жок
-
void *priv
ESPNOW жеке маалымат
-
Description:
Курдаштар тизмесине кошуу
esp_now_send (const uint8_t *peer_addr, const uint8_t *маалыматтар, size_t len)
Кайтып келет:
- ESP_OK: ийгиликтүү
- ESP_ERR_ESPNOW_NOT_INIT: ESPNOW инициализацияланган эмес
- ESP_ERR_ESPNOW_ARG: жараксыз аргумент
- ESP_ERR_ESPNOW_INTERNAL: ички ката
- ESP_ERR_ESPNOW_NO_MEM: эс тутумда жок
- ESP_ERR_ESPNOW_NOT_FOUND: теңтуш табылган жок
- ESP_ERR_ESPNOW_IF: учурдагы WiFi интерфейси теңтуштардыкына дал келбейт
Параметрлер:
- peer_addr: peer MAC дареги
- маалыматтар: жөнөтүү үчүн маалыматтар
- len: маалыматтын узундугу
Description:
ESPNOW дайындарын жөнөтүү. Кээ бир учурларда мындай болот:
- Эгерде peer_addr NULL болбосо, MAC дареги peer_addr менен дал келген курдашка маалыматтарды жөнөтүңүз
- Эгерде peer_addr NULL болсо, курдаштардын тизмесине кошулган бардык теңтуштарга маалыматтарды жөнөтүңүз
- Берилиштердин максималдуу узундугу ESP_NOW_MAX_DATA_LENден аз болушу керек
- Маалыматтардын аргументи көрсөткөн буфер esp_now_send кайтып келгенден кийин жарактуу болбошу керек
esp_now_register_recv_cb (cb)
Кайтаруулар:
- ESP_OK: ийгиликтүү
- ESP_ERR_ESPNOW_NOT_INIT: ESPNOW инициализацияланган эмес
- ESP_ERR_ESPNOW_INTERNAL: ички ката
Параметрлер:
-
cb: ESPNOW маалыматын алуу үчүн кайра чалуу функциясы
-
жараксыз cb (const uint8_t *mac_addr, const uint8_t *маалыматтар, int data_len)
-
mac_addr:
алуучунун Mac дареги
-
*маалыматтар:
маалыматтарды алуу
-
data_len
маалыматтын байт узундугу
-
-
Description:
ESPNOW маалыматын алгандан кийин cb функциясын чакырыңыз
4-кадам: ESP-NOW ФУНКЦИЯЛАРЫ (ESP8266)
FUNCTIONS DESCRIPTION ESP32 ESP8266
int esp_now_init (жараксыз)
Кайтып келет:
- 1 = ийгилик
- 0 = ийгиликсиз
Description
ESPNOW функциясын баштоо
int esp_now_set_self_role (u8 ролу)
Параметрлер:
- ESP_NOW_ROLE_IDLE: маалыматтарды берүүгө уруксат жок.
- ESP_NOW_ROLE_CONTROLLER: артыкчылык Sation интерфейсине берилет
- ESP_NOW_ROLE_SLAVE: артыкчылык SoftAP интерфейсине берилет
- ESP_NOW_ROLE_COMBO: SoftAPinterfaceке артыкчылык берилет
Description
Түзмөктүн ролун коет
int esp_now_register_send_cb (cb)
Кайтып келет:
- 1 = ийгилик
- 0 = ийгиликсиз
Параметрлер:
-
cb: бул параметрлер менен ESPNOW маалыматын жөнөткөндөн кийин кайра чалуу функциясынын аталышы:
-
жараксыз cb (const uint8_t *mac_addr, esp_now_send_status_t абалы)
- mac_addr: алуучунун Mac дареги
-
статус:
- 1 = ийгилик
- 0 = ийгиликсиз
-
Description
ESPNOW маалыматын жөнөткөндөн кийин OnDataSent функциясын чакырыңыз
int esp_now_add_peer (u8 *mac_addr, u8 ролу, u8 каналы, u8 *ачкычы, u8 key_len)
Кайтаруулар:
- 1 = ийгилик
- 0 = ийгиликсиз
Параметрлер:
-
mac_addr
теңтушумдун Mac дареги
- ролу
-
канал
Эгерде мааниси 0 болсо, учурдагы каналды колдонуңуз, кайсы станция же программалык камсыздоо. Болбосо, ал станция же программалык камсыздоо иштеп жаткан канал катары коюлушу керек
-
*ачкыч
шифрлөө үчүн ачкыч
-
key_len
ачкычтын узундугу
Description:
Курдаштар тизмесине кошуу
int esp_now_send (const uint8_t *peer_addr, const uint8_t *маалыматтар, size_t len)
Кайтып келет:
- 1 = Ийгилик
- 0 = Fail
Параметрлер:
- peer_addr: peer MAC дареги
- маалыматтар: жөнөтүү үчүн маалыматтар
- len: маалыматтын узундугу
Description:
ESPNOW дайындарын жөнөтүү. Кээ бир учурларда мындай болот:
- Эгерде peer_addr NULL болбосо, MAC дареги peer_addr менен дал келген курдашка маалыматтарды жөнөтүңүз
- Эгерде peer_addr NULL болсо, курдаштардын тизмесине кошулган бардык теңтуштарга маалыматтарды жөнөтүңүз
- Берилиштердин максималдуу узундугу ESP_NOW_MAX_DATA_LENден аз болушу керек
- Маалыматтардын аргументи көрсөткөн буфер esp_now_send кайтып келгенден кийин жарактуу болбошу керек
int esp_now_register_recv_cb (cb)
Кайтып келет:
- 1 = Ийгилик
- 0 = Fail
Параметрлер:
-
cb: ESPNOW маалыматын алуу үчүн кайра чалуу функциясы
-
жараксыз cb (const uint8_t *mac_addr, const uint8_t *маалыматтар, int data_len)
-
mac_addr:
алуучунун Mac дареги
-
*маалыматтар:
маалыматтарды алуу
-
data_len
маалыматтын байт узундугу
-
-
Description:
ESPNOW маалыматын алгандан кийин cb функциясын чакырыңыз
5 -кадам: Бир тараптуу байланыш (ESP32 жөнөтүүчү катары)
ESP32 маалыматтарды ESP8266га жөнөтөт. бул код менен. RoadAddress дарегин түзөтүүчү кабыл алуучуңуздун Mac дарегине өзгөртүңүз. Меники A4: CF: 12: C7: 9C: 77 болчу
// Керектүү китепканаларды кошуу
#include // esp азыр функцияларына кирүү үчүн #include // WSP мүмкүнчүлүктөрүн ESP32ге кошуу үчүн // MAC дарегин yayınAddress аттуу массивде сактоо; uint8_t yayımAddress = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; // Менин кабыл алуучумдун MAC дареги/*бир нече өзгөрмөлөрдүн маалымат түрлөрүн аныктап, анын баарын struct_message*/typedef struct struct_message деп аташты {char a [32]; int b; сүзүү c; Сап d; бол; } struct_message; // myData аттуу struct_message түзүңүз struct_message myData; // маалыматтын статусу жоктугун OnDataSent басып чыгаруу үчүн жөнөтүлгөндө чакырылган функция (const uint8_t *mac_addr, esp_now_send_status_t status) {Serial.print ("\ r / nАкыркы пакет жөнөтүү абалы: / t"); Serial.println (status == ESP_NOW_SEND_SUCCESS? "Жеткирүү ийгилиги": "Жеткирилбей калды"); } void setup () {// ESP Serial.begin (115200) менен сериялык байланыш үчүн бердин ылдамдыгын коюңуз; // Түзмөктү Wi-Fi Station WiFi.mode (WIFI_STA) катары коюңуз; // wifi'ди баштайт // ESP-АЗЫР баштайт жана анын абалын кайтарат, эгерде (esp_now_init ()! = ESP_OK) {Serial.println ("ESPти баштоо катасы -ЭМИ "); кайтуу; } // ESPNOW дайындарын esp_now_register_send_cb (OnDataSent) жөнөткөндөн кийин OnDataSent функциясын чакырыңыз; // Теңтуш esp_now_peer_info_t peerInfo; // инициализациялоо жана теңтуш маалыматын addres memcpy үчүн көрсөткүч катары дайындоо (peerInfo.peer_addr,roadAddress, 6); // radioAddress маанисин 6 байт менен көчүрүү peerInfo.peer_addr peerInfo.channel = 0; // esp сүйлөгөн канал. 0 белгисиз дегенди билдирет жана маалыматтар учурдагы каналга жөнөтүлөт. 1-14 жергиликтүү peerInfo.encrypt = false менен бирдей болгон жарактуу каналдар; // шифрленген эмес // Түзмөктү жупташкан түзмөктөр тизмесине кошуу эгер (esp_now_add_peer (& peerInfo)! = ESP_OK) {Serial.println ("Теңдешти кошуу ишке ашкан жок"); кайтуу; }} void loop () {// strcpy жөнөтүү үчүн маанилерди коюңуз (myData.a, "THIS IS A CHAR"); // "THIS IS A CHAR" сактоо myData.b = random (1, 20) мурда аныкталган "маалыматтарымдын" а өзгөрмөсүнө. // кокус маанини сактоо myData.c = 1.2; // float сактоо myData.d = "Салам"; // сапты сактоо myData.e = false; // bool сактоо // ESP-NOW аркылуу 250 байттан азыраак же барабар маалыматтарды жөнөтүү жана анын статусун кайтарат esp_err_t result = esp_now_send (roadAddress, (uint8_t *) & myData, sizeof (myData)); if (result == ESP_OK) {Serial.println ("Ийгилик менен жөнөтүлдү"); } else {Serial.println ("Маалыматтарды жөнөтүүдө ката кетти"); } delay (2000); }
ESP8266 бул кодду колдонуу менен ESP32ден маалыматтарды алат.
// Керектүү китепканаларды кошуу
#include // Wifi мүмкүнчүлүктөрүн ESP32ге кошуу үчүн #include // espке кирүү үчүн азыр функциялары /*структураланган көптөгөн өзгөрмөлөрдүн маалымат түрлөрүн аныктап, анын баарын struct_message* /typedef struct struct_message {char a [32]; int b; сүзүү c; Сап d; bool e; } struct_message; // myData аттуу struct_message өзгөрмөсүн түзүңүз struct_message myData; // функция кабыл алынганда чакырылат жана аны жокко чыгарат OnDataRecv (uint8_t * mac, uint8_t * incomingData, uint8_t len) {memcpy (& myData, incomingData, sizeof (myData))); Serial.print ("Байттар алынды:"); Serial.println (len); Serial.print ("Char:"); Serial.println (myData.a); Serial.print ("Int:"); Serial.println (myData.b); Serial.print ("Float:"); Serial.println (myData.c); Serial.print ("String:"); Serial.println (myData.d); Serial.print ("Bool:"); Serial.println (myData.e); Serial.println (); } void setup () {// ESP Serial.begin (115200) менен сериялык байланыш үчүн бердин ылдамдыгын коюңуз; // Түзмөктү Wi-Fi Station WiFi.mode (WIFI_STA) катары коюңуз; // wifi-ды баштайт // ESP-АЗЫР баштайт жана анын статусун кайтарат, эгерде (esp_now_init ()! = 0) {Serial.println ("ESP-NOW баштоо катасы"); кайтуу; } esp_now_set_self_role (ESP_NOW_ROLE_SLAVE); // Бул esp esp_now_register_recv_cb (OnDataRecv) ролун аныктайт; // ESPNOW маалыматын алгандан кийин OnDataRecv функциясын чакырыңыз} void loop () {}
6 -кадам: Бир тараптуу байланыш (ESP8266 жөнөтүүчү катары)
ESP8266 ESP32ге маалыматтарды жөнөтөт. бул код менен. RoadAddress дарегин түзөтүүчү кабыл алуучуңуздун Mac дарегине өзгөртүңүз. Менин esp32 дарегим 30: AE: A4: F5: 03: A4. Esp8266 үчүн башка функциялар үчүн бул жерге өтүңүз
// Керектүү китепканаларды кошуу
#include // ESP32де Wifi мүмкүнчүлүктөрүн кошуу үчүн #include // espтин азыр функциясына кирүү үчүн // MAC дарегинroadAddress аттуу массивде сактоо; uint8_t yayımAddress = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*структураланган бир нече өзгөрмөлөрдүн маалымат түрлөрүн аныктап, анын баарын struct_message деп өзгөрткөн*/ typedef struct struct_message {char a [32]; int b; сүзүү c; Сап d; bool e; } struct_message; // myData struct_message деп аталган структураланган өзгөрмөнү түзүү myData; // маалыматтар жөнөтүлгөндө чакырылат жана статусунун жараксыздыгын OnDataSent басып чыгарат (uint8_t *mac_addr, uint8_t sendStatus) {Serial.print ("\ r / nАкыркы пакет жөнөтүү абалы: / t"); Serial.println (sendStatus == 1? "Жеткирүү ийгилиги": "Жеткирилбей калды"); } void setup () {// ESP Serial.begin (115200) менен сериялык байланыш үчүн бердин ылдамдыгын коюңуз; // Түзмөктү Wi-Fi Station WiFi.mode (WIFI_STA) катары коюңуз; // wifi'ни баштайт // ESP-NOW'ди баштайт жана эгер анын статусун кайтарса, эгер (esp_now_init ()) {Serial.println ("ESP-NOW баштапкы катасы")); кайтуу; } esp_now_register_send_cb (OnDataSent); // ESPNOW маалыматын жөнөткөндөн кийин OnDataSent функциясына чалыңыз // Түзмөктү жупташкан түзмөктөрдүн тизмесине кошуңуз, эгерде (esp_now_add_peer (yayımAddress, ESP_NOW_ROLE_CONTROLLER, 1, NULL, 0)) {Serial.println ("Теңдешти кошуу ишке ашкан жок"); кайтуу; }} void loop () {// strcpy жөнөтүү үчүн маанилерди коюңуз (myData.a, "THIS IS A CHAR"); // "THIS IS A CHAR" сактоо myData.b = random (1, 20) мурда аныкталган менин "маалыматтарымдын" а өзгөрмөсүнө. // кокус маанини сактоо myData.c = 1.2; // float сактоо myData.d = "SP8266"; // сапты сактоо myData.e = false; // bool сактоо // ESP-NOW аркылуу 250 байттан аз же барабар маалыматтарды жөнөтүү жана статусун кайтарат int result = esp_now_send (roadAddress, (uint8_t *) & myData, sizeof (myData)); if (esp_now_init ()! = 0) {Serial.println ("Ийгилик менен жөнөтүлдү"); } else {Serial.println ("Маалыматтарды жөнөтүүдө ката кетти"); } delay (2000); }
ESP32 ESP8266дан маалыматтарды алат. бул код менен. Башка функциялар үчүн бул жерде калыстык кылыңыз
// Керектүү китепканаларды кошуу
#include // espке азыр кирүү үчүн #include // ESP32ге Wifi мүмкүнчүлүктөрүн кошуу үчүн /*структураланган жана анын баарын struct_message* /typedef struct struct_message {char a [32] деп өзгөрткөн көптөгөн өзгөрмөлөрдүн маалымат түрлөрүн аныктаңыз. int b; сүзүү c; Сап d; bool e; } struct_message; // myData аттуу struct_message өзгөрмөсүн түзүңүз struct_message myData; // функция алынганда чакырылат жана аны жокко чыгарат OnDataRecv (const uint8_t * mac, const uint8_t * incomingData, int len) {memcpy (& myData, incomingData, sizeof (myData)); Serial.print ("Байттар алынды:"); Serial.println (len); Serial.print ("Char:"); Serial.println (myData.a); Serial.print ("Int:"); Serial.println (myData.b); Serial.print ("Float:"); Serial.println (myData.c); Serial.print ("String:"); Serial.println (myData.d); Serial.print ("Bool:"); Serial.println (myData.e); Serial.println (); } void setup () {// ESP Serial.begin (115200) менен сериялык байланыш үчүн бердин ылдамдыгын коюңуз; // Түзмөктү Wi-Fi Station WiFi.mode (WIFI_STA) катары коюу; // wifi-ды баштайт // ESP-АЗЫР баштайт жана анын статусун кайтарат, эгерде (esp_now_init ()! = 0) {Serial.println ("ESP-NOW баштоо катасы"); кайтуу; } esp_now_register_recv_cb (OnDataRecv); // ESPNOW маалыматтарын алгандан кийин OnDataRecv функциясын чакырыңыз} void loop () {}
7 -кадам: ЭКИ ЖОЛ БАЙЛАНЫШ
ESP32 ESP8266га баштоо жөнүндө маалыматтарды жөнөтөт. ESP8266 алынган билдирүүнү басып чыгарат, андан кийин ESP32 анын сериялык мониторуна басып чыгарат.
ESP32 КОДУ
// Керектүү китепканаларды кошуу
#include // esp азыр функцияларына кирүү үчүн #include // ESP32де Wifi мүмкүнчүлүктөрүн кошуу үчүн // MAC дарегинroadAddress аттуу массивде сактоо; uint8_t yayımAddress = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; // Менин кабыл алуучумдун MAC дареги/*бир нече өзгөрмөлөрдүн маалымат түрлөрүн аныктап, анын баарын struct_message*/typedef struct struct_message деп аташты {char a [32]; int b; сүзүү c; Сап d; bool e; } struct_message; // myData аттуу struct_message түзүңүз struct_message myData; // маалыматтын статусу жоктугун OnDataSent басып чыгаруу үчүн жөнөтүлгөндө чакырылган функция (const uint8_t *mac_addr, esp_now_send_status_t status) {Serial.print ("\ r / nАкыркы пакет жөнөтүү абалы: / t"); Serial.println (status == ESP_NOW_SEND_SUCCESS? "Жеткирүү ийгилиги": "Жеткирилбей калды"); if (status! = ESP_NOW_SEND_SUCCESS) {send_data ();}} OnDataRecv жараксыз (const uint8_t * mac, const uint8_t * incomingData, int len) {memcpy (& myData, incomingData, sizeof (myData))); Serial.print ("Байттар алынды:"); Serial.println (len); Serial.print ("Char:"); Serial.println (myData.a); Serial.print ("Int:"); Serial.println (myData.b); Serial.print ("Float:"); Serial.println (myData.c); Serial.print ("String:"); Serial.println (myData.d); Serial.print ("Bool:"); Serial.println (myData.e); Serial.println (); } void setup () {// ESP Serial.begin (115200) менен сериялык байланыш үчүн бердин ылдамдыгын коюңуз; // Түзмөктү Wi-Fi Station WiFi.mode (WIFI_STA) катары коюңуз; // wifi'ди баштайт // ESP-АЗЫР баштайт жана анын абалын кайтарат, эгерде (esp_now_init ()! = ESP_OK) {Serial.println ("ESPти баштоо катасы -ЭМИ "); кайтуу; } // ESPNOW дайындарын esp_now_register_send_cb (OnDataSent) жөнөткөндөн кийин OnDataSent функциясын чакырыңыз; // Каттоо esp_now_peer_info_t peerInfo; // инициализациялоо жана теңтуш маалыматын addres memcpy үчүн көрсөткүч катары дайындоо (peerInfo.peer_addr,roadAddress, 6); // radioAddress маанисин 6 байт менен көчүрүү peerInfo.peer_addr peerInfo.channel = 0; // esp сүйлөгөн канал. 0 белгисиз дегенди билдирет жана маалыматтар учурдагы каналга жөнөтүлөт.1-14 жергиликтүү peerInfo.encrypt = false менен бирдей болгон жарактуу каналдар; // шифрленген эмес // Түзмөктү жупташкан түзмөктөр тизмесине кошуу эгер (esp_now_add_peer (& peerInfo)! = ESP_OK) {Serial.println ("Теңдешти кошуу ишке ашкан жок"); кайтуу; } esp_now_register_recv_cb (OnDataRecv); // ESPNOW маалыматтарын алгандан кийин OnDataRecv функциясына чалыңыз send_data (); } void loop () {} void send_data () {Serial.println ("Жөнөтүү"); // strcpy жөнөтүү үчүн маанилерди коюңуз (myData.a, "Бул БУЛ ЧАР"); // "THIS IS A CHAR" сактоо myData.b = random (1, 20) мурда аныкталган менин "маалыматтарымдын" а өзгөрмөсүнө. // кокус маанини сактоо myData.c = 1.2; // float сактоо myData.d = "ESP32"; // сапты сактоо myData.e = false; // bool сактоо // ESP-NOW аркылуу 250 байттан азыраак же барабар маалыматтарды жөнөтүү жана анын статусун кайтарат esp_err_t result = esp_now_send (roadAddress, (uint8_t *) & myData, sizeof (myData)); if (result == ESP_OK) {Serial.println ("Ийгилик менен жөнөтүлдү");} else {Serial.println ("Дайындарды жөнөтүүдө ката кетти"); }}
ESP8266 КОДУ
// Керектүү китепканаларды кошуу
#include // ESP32де Wifi мүмкүнчүлүктөрүн кошуу үчүн #include // espтин азыр функциясына кирүү үчүн // MAC дарегинroadAddress аттуу массивде сактоо; uint8_t yayımAddress = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*структураланган бир нече өзгөрмөлөрдүн маалымат түрлөрүн аныктап, анын баарын struct_message деп өзгөрткөн*/ typedef struct struct_message {char a [32]; int b; сүзүү c; Сап d; bool e; } struct_message; // myData аттуу struct_message өзгөрмөсүн түзүңүз struct_message myData; // функция кабыл алынганда чакырылат жана аны жокко чыгарат OnDataRecv (uint8_t * mac, uint8_t * incomingData, uint8_t len) {memcpy (& myData, incomingData, sizeof (myData))); Serial.print ("Байттар алынды:"); Serial.println (len); Serial.print ("Char:"); Serial.println (myData.a); Serial.print ("Int:"); Serial.println (myData.b); Serial.print ("Float:"); Serial.println (myData.c); Serial.print ("String:"); Serial.println (myData.d); Serial.print ("Bool:"); Serial.println (myData.e); Serial.println (); send_data (); } void OnDataSent (uint8_t *mac_addr, uint8_t sendStatus) {Serial.print ("\ r / nАкыркы пакет жөнөтүү абалы: / t"); Serial.println (sendStatus == 1? "Жеткирүү ийгилиги": "Жеткирилбей калды"); if (sendStatus! = 1) {send_data (); }} void send_data () {// strcpy (myData.a, "БУЛ ЧАР") жөнөтүү үчүн маанилерди коюңуз; // "THIS IS A CHAR" сактоо myData.b = random (1, 20) мурда аныкталган менин "маалыматтарымдын" а өзгөрмөсүнө. // кокус маанини сактоо myData.c = 1.2; // float сактоо myData.d = "ESP8266"; // сапты сактоо myData.e = false; // Save a bool esp_now_send (radioAddress, (uint8_t *) & myData, sizeof (myData)); } void setup () {// ESP Serial.begin (115200) менен сериялык байланыш үчүн бердин ылдамдыгын коюңуз; // Түзмөктү Wi-Fi Station WiFi.mode (WIFI_STA) катары коюу; // wifi-ды баштайт // ESP-АЗЫР баштайт жана анын статусун кайтарат, эгерде (esp_now_init ()! = 0) {Serial.println ("ESP-NOW баштоо катасы"); кайтуу; } if (esp_now_add_peer (roadAddress, ESP_NOW_ROLE_SLAVE, 1, NULL, 0)) {Serial.println ("Теңдешти кошуу ишке ашкан жок"); кайтуу; } esp_now_set_self_role (ESP_NOW_ROLE_COMBO); esp_now_register_send_cb (OnDataSent); esp_now_set_self_role (ESP_NOW_ROLE_COMBO); // Бул esp esp_now_register_recv_cb (OnDataRecv) ролун аныктайт; // ESPNOW маалыматтарын алгандан кийин OnDataRecv функциясын чакырыңыз} void loop () {}
8 -кадам: АДАБИЯТТАР
ESPNOW_32_Example
ESPNOW_8266 Мисал
WIFI.h
ESP8266WiFi.h
esp_now.h ESP8266 үчүн
esp_now.h ESP32 үчүн
esp_now расмий документи (Функцияларды жакшыраак түшүндүрүү)
ESP-NOW расмий гид
Сунушталууда:
Бир аналог пинди колдонуу менен бир нече аналогдук баалуулуктарды кантип окуу керек: 6 кадам (сүрөттөр менен)
Бир аналог пинди колдонуу менен бир нече аналогдук баалуулуктарды кантип окуу керек: Бул үйрөткүчтө мен сизге бир эле аналогдук кирүүчү пинди колдонуу менен бир нече аналогдук баалуулуктарды кантип окууну көрсөтөм
Бир нече BMP280 сенсорлору Arduino Uno аркылуу SPI аркылуу: 6 кадам
Бир нече BMP280 сенсорлору Arduino Uno аркылуу SPI аркылуу: Бул үйрөткүчтө биз үч BMP280ди Arduino Unoго SPI аркылуу туташтырабыз, бирок сен Uno боюнча D3 to D10 санарип портторун колдонуу менен ар бир сенсор үчүн nSS (Slave Select) менен сегиз BMP280ге чейин туташа аласың. В ченегенде атмосфералык басымдын үлгүлөрүнүн
Бир Мосфетти колдонуу менен үн реактивдүү ледтерди кантип жасоо керек: 6 кадам (сүрөттөр менен)
Бир Мосфетти колдонуу менен үн реактивдүү ледтерди кантип жасоо керек: Салам достор бүгүн мен кантип көрсөтөм: IRFZ44 бир мосфет транзистору жана башка бөлүктөрүн колдонуу менен үн реактивдүү коргошундарды кантип түзүү керек жана үйдө түнкү жарык эффектиси үчүн чогултуу оңой
Бир нече микроконтроллерден кантип көп LED айдаш керек: 6 кадам (сүрөттөр менен)
Бир нече микроконтроллерден кантип көп LED айдаш керек.: Көптөгөн микроконтроллердин үч штаты (+V, GND, же " жогорку импеденттүү ") болгондугун колдонуп, N*(N-1) светодиоддорду N казыгынан айдай аласыз. Ошентип, кичинекей 8pin микроконтроллери PIC12Fxxx же ATtiny11 сыяктуу беш LED жеткиликтүү 20 светодиодду айдай алат
Бир нече жарым -жартылай фокусталган бир толук фокусталган сүрөттү кантип түзүү керек: 4 кадам
Бир нече жарым -жартылай фокусталган бир сүрөттү кантип түзүү керек: Мен Helicon Focus программасын колдонууну сунуштайм. Windows жана Mac версиялары d-Stidio сайтында жеткиликтүү.Бул программа тайыз тереңдик көйгөйүн чечүү үчүн макрофотография, микрофотография жана гиперфокалдык пейзаж сүрөтү үчүн иштелип чыккан