Мазмұны:
- Жабдықтар
- 1 -қадам: Board адресін алыңыз
- 2-қадам: ESP-NOW қалай жұмыс істейді
- 3-қадам: ESP-NOW ФУНКЦИЯЛАРЫ (ESP32)
- 4-қадам: ESP-NOW ФУНКЦИЯЛАРЫ (ESP8266)
- 5 -қадам: Бір жақты байланыс (ESP32 жіберуші ретінде)
- 6 -қадам: Бір жақты байланыс (ESP8266 жіберуші ретінде)
- 7 -қадам: ЕКІ ТАРАҚТЫ БАЙЛАНЫС
- 8 -қадам: ӘДЕБИЕТТЕР
Бейне: ESP32 және ESP8266 көмегімен ESP-NOW арқылы бірнеше ESP әңгімесін қалай жасауға болады: 8 қадам
2024 Автор: John Day | [email protected]. Соңғы өзгертілген: 2024-01-30 10:23
Менің ағымдағы жобада маршрутизаторсыз бір -бірімен сөйлесу үшін маған бірнеше ESP қажет. Мұны істеу үшін мен ESP-NOW көмегімен ESP-те маршрутизаторсыз бір-бірімен сымсыз байланыс орнату үшін қолданатын боламын.
Жабдықтар
Мен қолданған заттар:
ESP32 DEV модулі
NODEMCU 1.0 (ESP12E модулі)
1 -қадам: Board адресін алыңыз
ESP-now арқылы ESP құрылғылары бірегей адреске деректерді жіберу арқылы бір-бірімен сөйлеседі, ал қазір esp-ті интуициялау кезінде жасалған ішкі кіру нүктесі желісіне қосылған.. Осылайша, әр құрылғының MAC мекенжайын анықтаңыз. Менің ESP32 және ESP8266 тақталар тақтасы бекітілген
ESP32 үшін
#«WiFi.h» қосу // ESP32 WIFI мүмкіндіктеріне қол жеткізу үшін
void setup () {Serial.begin (115200); Serial.print («ESP32 тақтасының MAC мекенжайы:»); Serial.println (WiFi.macAddress ()); // өзінің MAC мекенжайын басып шығарады} void loop () {}
ESP8266 үшін
#include // ESP8266 WIFI мүмкіндіктеріне қол жеткізу үшін пайдаланылатын кітапхана
void setup () {Serial.begin (115200); Serial.println (); Serial.print («ESP8266 тақтасының 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 алушының мак -мекен -жайын сақтаңыз
- Жіберілген/алынған хабардың деректер құрылымын анықтаңыз
- Орнатуда wifi -ды станция режиміне қойыңыз
- Esp_now іске қосыңыз
- деректерді жібергеннен және қабылдағаннан кейін қоңырау шалу функциясын жасау және тіркеу
- Esp8266 үшін оның рөлін анықтаңыз
- құрдасын немесе алушыны тіркеңіз esp
- Деректерді жіберу
3-қадам: ESP-NOW ФУНКЦИЯЛАРЫ (ESP32)
esp_now_init (жарамсыз)
Қайту:
- ESP_OK: табысқа жету
- ESP_ERR_ESPNOW_INTERNAL: Ішкі қате
Сипаттама:
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: қабылдағыштың мекен -жайы
-
күй:
- 1 = сәттілік
- 0 = сәтсіздік
-
Сипаттама:
ESPNOW деректерін жібергеннен кейін OnDataSent функциясына қоңырау шалыңыз
esp_now_add_peerconst esp_now_peer_info_t *құрдасы)
Қайтарулар:
- 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: теңдестірілген ақпарат келесі деректермен:
-
uint8_t
peer_addr [ESP_NOW_ETH_ALEN]; ESPNOW тең MAC мекенжайы - бұл станцияның немесе бағдарламаның MAC мекенжайы
-
uint8_t lmk [ESP_NOW_KEY_LEN]
ESPNOW деректерді шифрлау үшін пайдаланылатын жергілікті басты кілт
-
uint8_t арнасы
ESPNOW деректерін жіберу/алу үшін құрдастары қолданатын Wi-Fi арнасы. Егер мән 0 болса, станция немесе бағдарламалық жасақтама қосылған ағымдағы арнаны пайдаланыңыз. Әйтпесе, оны станция немесе бағдарламалық құрал қосылатын арна ретінде орнату керек
-
wifi_interface_t ifidx
ESPNOW деректерін жіберу/алу үшін құрдасы қолданатын Wi-Fi интерфейсі
-
bool шифры
Бұл құрбы жіберетін/алатын ESPNOW деректері шифрланған немесе жоқ
-
void *priv
ESPNOW жеке деректері
-
Сипаттама:
Құрдастар тізіміне құрдастарды қосыңыз
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: тең MAC мекенжайы
- деректер: жіберілетін деректер
- len: деректер ұзындығы
Сипаттама:
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 деректерін алуға арналған кері шақыру функциясы
-
void cb (const uint8_t *mac_addr, const uint8_t *деректер, int data_len)
-
mac_addr:
алушының Mac мекенжайы
-
*мәліметтер:
мәліметтерді қабылдау
-
data_len
деректер байтының ұзындығы
-
-
Сипаттама:
ESPNOW деректерін алғаннан кейін cb функциясына қоңырау шалыңыз
4-қадам: ESP-NOW ФУНКЦИЯЛАРЫ (ESP8266)
ФУНКЦИЯЛАРДЫҢ СИПАТТАМАСЫ ESP32 ESP8266
int esp_now_init (жарамсыз)
Қайтарулар:
- 1 = сәттілік
- 0 = сәтсіздік
Сипаттама
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 басымдығы беріледі
Сипаттама
Құрылғының рөлін орнатады
int esp_now_register_send_cb (cb)
Қайтарулар:
- 1 = сәттілік
- 0 = сәтсіздік
Параметрлер:
-
cb: осы параметрлермен ESPNOW деректерін жібергеннен кейін кері шақыру функциясының атауы:
-
жарамсыз cb (const uint8_t *mac_addr, esp_now_send_status_t күйі)
- mac_addr: қабылдағыштың мекен -жайы
-
күй:
- 1 = сәттілік
- 0 = сәтсіздік
-
Сипаттама
ESPNOW деректерін жібергеннен кейін OnDataSent функциясына қоңырау шалыңыз
int esp_now_add_peer (u8 *mac_addr, u8 рөлі, u8 арнасы, u8 *пернесі, u8 key_len)
Қайтарулар:
- 1 = сәттілік
- 0 = сәтсіздік
Параметрлер:
-
mac_addr
құрбысының Mac мекенжайы
- рөлі
-
арна
Егер мән 0 болса, станция немесе бағдарламалық жасақтама қосылған ағымдағы арнаны пайдаланыңыз. Әйтпесе, оны станция немесе бағдарламалық құрал қосылатын арна ретінде орнату керек
-
*кілт
шифрлау кілті
-
key_len
кілт ұзындығы
Сипаттама:
Құрдастар тізіміне құрдастарды қосыңыз
int esp_now_send (const uint8_t *peer_addr, const uint8_t *деректер, size_t len)
Қайтарулар:
- 1 = сәттілік
- 0 = сәтсіздік
Параметрлер:
- peer_addr: тең MAC мекенжайы
- деректер: жіберілетін деректер
- len: деректер ұзындығы
Сипаттама:
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 = сәтсіздік
Параметрлер:
-
cb: ESPNOW деректерін алуға арналған кері шақыру функциясы
-
void cb (const uint8_t *mac_addr, const uint8_t *деректер, int data_len)
-
mac_addr:
алушының Mac мекенжайы
-
*мәліметтер:
мәліметтерді қабылдау
-
data_len
деректер байтының ұзындығы
-
-
Сипаттама:
ESPNOW деректерін алғаннан кейін cb функциясына қоңырау шалыңыз
5 -қадам: Бір жақты байланыс (ESP32 жіберуші ретінде)
ESP32 деректерді ESP8266 жібереді. осы кодпен. BroadcastAddress қабылдағышының Mac мекен -жайына өзгертіңіз. Менікі A4: CF: 12: C7: 9C: 77 болды
// Қажетті кітапханаларды қосыңыз
#include // esp енді функцияларына кіру үшін #include // ESP32 -де Wifi мүмкіндіктерін қосу үшін // MAC мекен -жайын yayınдік мекенжай деп аталатын массивте сақтаңыз; 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 жасаңыз; // функция дерексіз күйді басып шығару үшін OnDataSent жіберілген кезде шақырылады (const uint8_t *mac_addr, esp_now_send_status_t күйі) {Serial.print («\ r / nСоңғы пакеттік жіберу күйі: / t»); Serial.println (status == ESP_NOW_SEND_SUCCESS? «Жеткізу сәтті»: «Жеткізілмеді»); } void setup () {// ESP Serial.begin (115200) сериялы байланыс үшін жіберу жылдамдығын орнату; // Құрылғыны Wi-Fi станциясының WiFi режимі ретінде орнату (WIFI_STA); // Wi-Fi қосылады // ESP-NOW қосады және оның күйін қайтарады, егер (esp_now_init ()! = ESP_OK) {Serial.println («ESP инициализациялау қатесі -ҚАЗІР «); қайтару; } // ESPNOW деректерін жібергеннен кейін OnDataSent функциясына қоңырау шалыңыз esp_now_register_send_cb (OnDataSent); // pe_Inow_peer_info_t peerInfo -ға тіркелу; // инициализациялау және теңдестірілген ақпаратты addres memcpy -ге көрсеткіш ретінде тағайындау (peerInfo.peer_addr,roadAddress, 6); // peerInfo.peer_addr peerInfo.channel = 0 -ге 6 байт бар radioAddress мәнін көшіру; // esp сөйлейтін арна. 0 анықталмаған дегенді білдіреді және деректер ағымдағы арнаға жіберіледі. 1-14-бұл жергілікті құрылғы peerInfo.encrypt = false сияқты жарамды арналар; // шифрланбаған // Құрылғыны жұпталған құрылғылар тізіміне қосыңыз, егер (esp_now_add_peer (& peerInfo)! = ESP_OK) {Serial.println («Тең құрама қосылмады»); қайтару; }} void loop () {// strcpy жіберу үшін мәндерді орнатыңыз (myData.a, «Бұл - CHAR»); // «THIS IS CHAR» сақтаңыз «myData.b = random (1, 20) бұрын анықталған менің» деректерімнің «a айнымалысына; // кездейсоқ мәнді сақтау 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 (нәтиже == ESP_OK) {Serial.println («Сәтті жіберілді»); } else {Serial.println («Деректерді жіберу қателігі»); } кешіктіру (2000 ж.); }
ESP8266 осы кодты қолдана отырып ESP32 деректерін алады.
// Қажетті кітапханаларды қосыңыз
#include // Wifi мүмкіндіктерін ESP32 -ге қосу үшін #include // esp -ке енді кіру үшін функциялары /*құрылымдалған және оның барлығын struct_message* /typedef struct struct_message {char a [32] деп өзгертілген көптеген айнымалылардың деректер түрлерін анықтайды; int b; қалқыма c; D жолы; бол; } 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 («Жол:»); 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) ретінде орнату; // Wi-Fi қосылады // ESP-NOW Init және оның күйін қайтарады, егер (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 деректерді жібереді. осы кодпен. BroadcastAddress қабылдағышының Mac мекен -жайына өзгертіңіз. Менің esp32 мекен -жайым 30: AE: A4: F5: 03: A4. Esp8266 үшін басқа функциялар үшін осында өтіңіз
// Қажетті кітапханаларды қосыңыз
#include // ESP32 -де Wifi мүмкіндіктерін қосу үшін #include // esp -ке енді кіру үшін функциялары // MAC -адресті radioAddress деп аталатын массивте сақтаңыз; 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) ретінде орнату; // Wi-Fi қосылады // 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, «Бұл - CHAR»); // «THIS IS CHAR» сақтаңыз «myData.b = random (1, 20) бұрын анықталған менің» деректерімнің «a айнымалысына; // кездейсоқ мәнді сақтау 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 («Деректерді жіберу қателігі»); } кешіктіру (2000 ж.); }
ESP32 ESP8266 деректерін алады. осы кодпен. Басқа функциялар үшін осында төрелік етеді
// Қажетті кітапханаларды қосыңыз
#include // esp енді кіру функциялары #include // ESP32 -де Wifi мүмкіндіктерін қосу үшін**құрылымдалған және оның барлығын struct_message* /typedef struct struct_message {char a [32] деп өзгертілген көптеген айнымалылардың деректер түрлерін анықтаңыз; int b; қалқыма c; D жолы; бол; } 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 («Жол:»); 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) ретінде орнату; // Wi-Fi қосылады // InSP ESP-NOW және оның күйін қайтарады, егер (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 мекенжайын yayınдік мекенжай деп аталатын массивте сақтаңыз; 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 жасаңыз; // функция дерексіз күйді басып шығару үшін OnDataSent жіберілген кезде шақырылады (const uint8_t *mac_addr, esp_now_send_status_t күйі) {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 («Жол:»); Serial.println (myData.d); Serial.print («Bool:»); Serial.println (myData.e); Serial.println (); } void setup () {// ESP Serial.begin (115200) сериялы байланыс үшін жіберу жылдамдығын орнату; // Құрылғыны Wi-Fi Station WiFi режимі ретінде орнату (WIFI_STA); // Wi-Fi қосылады // ESP-NOW қосады және оның күйін қайтарады, егер (esp_now_init ()! = ESP_OK) {Serial.println («ESP инициализациялау қатесі -ҚАЗІР «); қайтару; } // ESPNOW деректерін жібергеннен кейін OnDataSent функциясына қоңырау шалыңыз esp_now_register_send_cb (OnDataSent); // pe_Inow_peer_info_t peerInfo -ға тіркелу; // инициализациялау және теңдестірілген ақпаратты addres memcpy көрсеткіші ретінде тағайындау (peerInfo.peer_addr,roadAddress, 6); // peerInfo.peer_addr peerInfo.channel = 0 -ге 6 байт бар radioAddress мәнін көшіріңіз; // esp сөйлейтін арна. 0 анықталмаған дегенді білдіреді және деректер ағымдағы арнаға жіберіледі.1-14-бұл жергілікті құрылғы peerInfo.encrypt = false сияқты жарамды арналар; // шифрланбаған // Құрылғыны жұпталған құрылғылар тізіміне қосыңыз, егер (esp_now_add_peer (& peerInfo)! = ESP_OK) {Serial.println («Тең құрама қосылмады»); қайтару; } esp_now_register_recv_cb (OnDataRecv); // ESPNOW деректерін send_data () алғаннан кейін OnDataRecv функциясына қоңырау шалыңыз; } void loop () {} void send_data () {Serial.println («Жіберу»); // strcpy жіберу үшін мәндерді орнатыңыз (myData.a, «Бұл - CHAR»); // «THIS IS CHAR» сақтаңыз «myData.b = random (1, 20) бұрын анықталған менің» деректерімнің «a айнымалысына; // кездейсоқ мәнді сақтау 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 (нәтиже == ESP_OK) {Serial.println («Сәтті жіберілді»);} else {Serial.println («Деректерді жіберу қатесі»); }}
ESP8266 коды
// Қажетті кітапханаларды қосыңыз
#include // ESP32 -де Wifi мүмкіндіктерін қосу үшін #include // esp -ке енді кіру үшін функциялары // MAC -адресті radioAddress деп аталатын массивте сақтаңыз; uint8_t yayımAddress = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*көптеген айнымалылардың деректер түрлерін құрылымдап, олардың барлығын struct_message деп атады*/ typedef struct struct_message {char a [32]; int b; қалқыма c; D жолы; бол; } 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 («Жол:»); 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, «Бұл - CHAR»); // «THIS IS CHAR» сақтаңыз «myData.b = random (1, 20) бұрын анықталған менің» деректерімнің «a айнымалысына; // кездейсоқ мәнді сақтау myData.c = 1.2; // float сақтау myData.d = «ESP8266»; // жолды сақтау myData.e = false; // сақтауды сақтаңыз esp_now_send (roadAddress, (uint8_t *) & myData, sizeof (myData)); } void setup () {// ESP Serial.begin (115200) сериялы байланыс үшін жіберу жылдамдығын орнату; // Құрылғыны Wi-Fi Station WiFi.mode (WIFI_STA) ретінде орнату; // Wi-Fi қосылады // InSP ESP-NOW және оның күйін қайтарады, егер (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_Мысалы
ESPNOW_8266 Мысал
WIFI.h
ESP8266WiFi.h
esp_now.h ESP8266 үшін
esp_now.h ESP32 үшін
esp_now ресми құжаты (функцияларды жақсырақ түсіндіру)
ESP-NOW ресми нұсқаулығы
Ұсынылған:
DIY қалай керемет көрінетін сағатты жасауға болады - StickC - Оңай жасауға болады: 8 қадам
DIY қалай керемет көрінетін сағатты жасауға болады - StickC - Оңай жасауға болады: Бұл оқулықта біз ESP32 M5Stack StickC -ті Arduino IDE және Visuino көмегімен СКД -де уақытты көрсету үшін қалай бағдарламалауды, сонымен қатар StickC түймелерінің көмегімен уақытты орнатуды үйренеміз
Бір аналогты түйреуіш арқылы бірнеше аналогтық мәндерді қалай оқуға болады: 6 қадам (суреттермен)
Бір аналогтық түйреуіш арқылы бірнеше аналогтық мәндерді қалай оқу керек: Бұл оқулықта мен сізге тек бір аналогтық кіріс түйреуіші арқылы бірнеше аналогтық мәндерді қалай оқу керектігін көрсетемін
Ағаштың бірнеше бөлігін сүйкімді және қуатты робот қолына жинау үшін қалай қолдануға болады: 10 қадам
Ағаштың бірнеше бөлігін сүйкімді және қуатты робот қолына жинау үшін қалай қолдануға болады: Робот қолының аты - WoodenArm. Бұл өте сүйкімді көрінеді! Егер сіз WoodenArm туралы толығырақ білгіңіз келсе, www.lewansoul.com сайтына кіріңіз. Енді біз WoodenArm туралы кіріспе жасай аламыз, әрі қарай жалғастырайық
WiFi арқылы Blynk арқылы жарықдиодты басқару үшін ESP32 қалай қолдануға болады: 7 қадам (суреттермен)
Wifi арқылы Blynk арқылы жарықдиодты басқару үшін ESP32 қалай қолдануға болады: Бұл оқулықта WiFi арқылы Blynk көмегімен жарықдиодты басқару үшін ESP32 даму тақтасы қолданылады. Blynk - бұл Arduino, Raspberry Pi және интернеттегі ұнатуларды басқаруға арналған iOS және Android қосымшалары бар платформа. Бұл сандық бақылау тақтасы, онда сіз
Бірнеше жартылай фокусталған толық фокусталған суретті қалай жасауға болады: 4 қадам
Бірнеше жартылай фокусталған толық фокусталған суретті қалай жасауға болады: мен Helicon Focus бағдарламалық жасақтамасын қолдануды ұсынамын. Windows және Mac нұсқалары d-Stidio сайтында қол жетімді Бағдарлама макрофотографияға, микрофотографияға және гиперфокальды ландшафт фотосуреттеріне арналған, өріс тереңдігінің мәселесін шешуге арналған