Სარჩევი:
- მარაგები
- ნაბიჯი 1: მიიღეთ დაფის Mac მისამართი
- ნაბიჯი 2: როგორ გახადოთ ESP-NOW მუშაობა
- ნაბიჯი 3: ESP-NOW FUNCTIONS (ESP32)
- ნაბიჯი 4: ESP-NOW FUNCTIONS (ESP8266)
- ნაბიჯი 5: ცალმხრივი კომუნიკაცია (ESP32 როგორც გამგზავნი)
- ნაბიჯი 6: ცალმხრივი კომუნიკაცია (ESP8266 როგორც გამგზავნი)
- ნაბიჯი 7: ორმხრივი კომუნიკაცია
- ნაბიჯი 8: მითითებები
ვიდეო: როგორ გააკეთოთ მრავალჯერადი ESP საუბარი ESP-NOW– ით ESP32 და ESP8266 გამოყენებით: 8 ნაბიჯი
2024 ავტორი: John Day | [email protected]. ბოლოს შეცვლილი: 2024-01-30 10:16
ჩემს მიმდინარე პროექტზე, მე მჭირდება მრავალი ESP, რომ ვისაუბროთ ერთმანეთთან როუტერის გარეშე. ამისათვის მე ვიყენებ ESP-NOW– ს, რათა უკაბელო კომუნიკაცია მოხდეს ერთმანეთთან როუტერის გარეშე ESP– ზე.
მარაგები
ნივთები, რომლებიც მე გამოვიყენე:
ESP32 DEV მოდული
NODEMCU 1.0 (ESP12E მოდული)
ნაბიჯი 1: მიიღეთ დაფის Mac მისამართი
ESP– ახლა, ESP მოწყობილობები ესაუბრებიან ერთმანეთს მონაცემების გაგზავნით მათ უნიკალურ მისამართზე, ხოლო დაკავშირებულია შიდა წვდომის წერტილების ქსელთან, რომელიც შექმნილია esp– ს ინტილაციის დროს. რა ამრიგად, განსაზღვრეთ თითოეული მოწყობილობის MAC მისამართი. მიმაგრებულია ჩემი ESP32 და ESP8266 დაფის პარამეტრები
ESP32- ისთვის
#მოიცავს "WiFi.h" // ESP32 WIFI შესაძლებლობებზე წვდომისათვის
void setup () {Serial.begin (115200); Serial.print ("ESP32 Board MAC მისამართი:"); Serial.println (WiFi.macAddress ()); // ბეჭდავს თავის MAC მისამართს} void loop () {}
ESP8266- ისთვის
#მოიცავს // ბიბლიოთეკა გამოიყენება 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– ისთვის განსაზღვრეთ მისი როლი
- დაარეგისტრირეთ თანატოლი ან მიმღები esp
- მონაცემების გაგზავნა
ნაბიჯი 3: ESP-NOW FUNCTIONS (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: მიმღების mac მისამართი
-
სტატუსი:
- 1 = წარმატება
- 0 = მარცხი
-
აღწერა:
დარეკეთ ფუნქცია OnDataSent ESPNOW მონაცემების გაგზავნის შემდეგ
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: თანატოლი არსებობს
Პარამეტრები:
-
თანატოლები: თანატოლების ინფორმაცია შემდეგი მონაცემებით:
-
uint8_t
peer_addr [ESP_NOW_ETH_ALEN]; ESPNOW თანხმობა MAC მისამართი, რომელიც ასევე არის სადგურის ან პროგრამის MAC მისამართი
-
uint8_t lmk [ESP_NOW_KEY_LEN]
ESPNOW თანხმობა ადგილობრივი სამაგისტრო გასაღები, რომელიც გამოიყენება მონაცემთა დასაშიფრად
-
uint8_t არხი
Wi-Fi არხი, რომელსაც თანატოლი იყენებს ESPNOW მონაცემების გასაგზავნად/მისაღებად. თუ მნიშვნელობა არის 0, გამოიყენეთ მიმდინარე არხი, რომელ სადგურზე ან პროგრამულ უზრუნველყოფაზეა ჩართული. წინააღმდეგ შემთხვევაში, ის უნდა იყოს მითითებული, როგორც არხი, რომელზეც არის სადგური ან პროგრამული უზრუნველყოფა
-
wifi_interface_t ifidx
Wi-Fi ინტერფეისი, რომელსაც თანატოლი იყენებს ESPNOW მონაცემების გასაგზავნად/მისაღებად
-
ბულის დაშიფვრა
ESPNOW მონაცემები, რომელსაც ეს თანატოლი აგზავნის/იღებს არის დაშიფრული თუ არა
-
ბათილია *კერძო
ESPNOW თანხმობის პირადი მონაცემები
-
აღწერა:
დაამატეთ თანატოლები თანატოლების სიაში
esp_now_send (const uint8_t *peer_addr, const uint8_t *data, 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 *data, int data_len)
-
mac_addr:
მიმღების mac მისამართი
-
*მონაცემები:
მონაცემების მიღება
-
data_len
მონაცემთა ბაიტის სიგრძე
-
-
აღწერა:
დარეკეთ ფუნქცია cb ESPNOW მონაცემების მიღების შემდეგ
ნაბიჯი 4: ESP-NOW FUNCTIONS (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: მიმღების mac მისამართი
-
სტატუსი:
- 1 = წარმატება
- 0 = მარცხი
-
აღწერა
დარეკეთ ფუნქცია OnDataSent ESPNOW მონაცემების გაგზავნის შემდეგ
int esp_now_add_peer (u8 *mac_addr, u8 როლი, u8 არხი, u8 *გასაღები, u8 key_len)
აბრუნებს:
- 1 = წარმატება
- 0 = მარცხი
Პარამეტრები:
-
mac_addr
თანატოლის მაკ მისამართი
- როლი
-
არხი
თუ მნიშვნელობა არის 0, გამოიყენეთ მიმდინარე არხი, რომელ სადგურზე ან პროგრამულ უზრუნველყოფაზეა ჩართული. წინააღმდეგ შემთხვევაში, ის უნდა იყოს მითითებული, როგორც არხი, რომელზეც არის სადგური ან პროგრამული უზრუნველყოფა
-
*გასაღები
გასაღები დაშიფვრისთვის
-
გასაღები_ლენ
გასაღების სიგრძე
აღწერა:
დაამატეთ თანატოლები თანატოლების სიაში
int esp_now_send (const uint8_t *peer_addr, const uint8_t *data, 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 *data, int data_len)
-
mac_addr:
მიმღების mac მისამართი
-
*მონაცემები:
მონაცემების მიღება
-
data_len
მონაცემთა ბაიტის სიგრძე
-
-
აღწერა:
დარეკეთ ფუნქცია cb ESPNOW მონაცემების მიღების შემდეგ
ნაბიჯი 5: ცალმხრივი კომუნიკაცია (ESP32 როგორც გამგზავნი)
ESP32 აგზავნის მონაცემებს ESP8266– ზე. ამ კოდით. შეცვალეთ broadcastAddress თქვენი მიმღების მიმღების mac მისამართით. ჩემი იყო A4: CF: 12: C7: 9C: 77
// საჭირო ბიბლიოთეკების დამატება
#მოიცავს // esp– ს წვდომისათვის ახლა შედის ფუნქციები #მოიცავს // დაამატეთ WIFI შესაძლებლობები ESP32– ზე // შეინახეთ MAC მისამართი მასივში სახელად broadcastAddress; uint8_t მაუწყებლობის მისამართი = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; // ჩემი მიმღების MAC მისამართი/*განსაზღვრავს მრავალი ცვლადის მონაცემთა ტიპს, რომელიც სტრუქტურირებულია და დაერქვა ყველა მას, როგორც struct_message*/typedef struct struct_message {char a [32]; int ბ; float c; სიმებიანი დ; bool e; } struct_message; // შექმნა სტრუქტური_მოწერა, სახელწოდებით myData struct_message myData; // ფუნქცია იძახება, როდესაც მონაცემები იგზავნება დასაბეჭდად მისი სტატუსი void OnDataSent (const uint8_t *mac_addr, esp_now_send_status_t სტატუსი) {Serial.print ("\ r / n ბოლო პაკეტის გაგზავნის სტატუსი: / t"); Serial.println (სტატუსი == ESP_NOW_SEND_SUCCESS? "მიწოდება წარმატებულია": "მიწოდება ვერ მოხერხდა"); } void setup () {// დააყენეთ baud განაკვეთი სერიული კომუნიკაციისთვის ESP Serial.begin (115200); // მოწყობილობის დაყენება Wi-Fi სადგურის WiFi.mode (WIFI_STA); // იწყებს wifi // იწყებს ESP-NOW და უბრუნებს თავის სტატუსს თუ (esp_now_init ()! = ESP_OK) {Serial.println ("ESP ინიციალიზაციის შეცდომა -ახლა "); დაბრუნების; } // დარეკეთ ფუნქცია OnDataSent ESPNOW მონაცემების გაგზავნის შემდეგ esp_now_register_send_cb (OnDataSent); // რეგისტრაცია peer esp_now_peer_info_t peerInfo; // ინიციალიზაცია და თანატოლების ინფორმაციის მიმანიშნებლის მინიჭება ადრესატების მემკვიდრეობისათვის (peerInfo.peer_addr, broadcastAddress, 6); // დააკოპირეთ broadcastAddress- ის მნიშვნელობა 6 ბაიტით peerInfo.peer_addr peerInfo.channel = 0; // არხი, რომელზეც ესპ ლაპარაკია. 0 ნიშნავს განუსაზღვრელს და მონაცემები გაიგზავნება მიმდინარე არხზე. 1-14 არის მოქმედი არხები, რაც იგივეა რაც ადგილობრივ მოწყობილობასთან peerInfo.encrypt = false; // დაშიფრული არ არის // დაამატეთ მოწყობილობა დაწყვილებული მოწყობილობების სიაში, თუ (esp_now_add_peer (& peerInfo)! = ESP_OK) {Serial.println ("თანატოლის დამატება ვერ მოხერხდა"); დაბრუნების; }} void loop () {// დააყენეთ მნიშვნელობები strcpy– ის გასაგზავნად (myData.a, "THIS IS A CHAR"); // შეინახეთ "THAR IS CHAR" ჩემი myData.b = ადრე განსაზღვრული ჩემი "მონაცემების" ცვლადში. b = შემთხვევითი (1, 20); // შეინახეთ შემთხვევითი მნიშვნელობა myData.c = 1.2; // float myData.d = "გამარჯობა" შენახვა; // შეინახეთ სტრიქონი myData.e = false; // შეინახეთ bool // გაგზავნეთ მონაცემები ნაკლები ან ტოლი 250 ბაიტი ESP-NOW– ით და უბრუნებს მის სტატუსს esp_err_t result = esp_now_send (broadcastAddress, (uint8_t *) & myData, sizeof (myData)); if (შედეგი == ESP_OK) {Serial.println ("გაიგზავნა წარმატებით"); } else {Serial.println ("მონაცემთა გაგზავნის შეცდომა"); } დაყოვნება (2000); }
ESP8266 იღებს მონაცემებს ESP32– დან ამ კოდის გამოყენებით.
// საჭირო ბიბლიოთეკების დამატება
#მოიცავს // ESP32– ზე Wifi შესაძლებლობების დასამატებლად #ჩართეთ // esp– ს წვდომისთვის ფუნქციები /*განსაზღვრავს მრავალი ცვლადის მონაცემთა ტიპს სტრუქტურირებული და გადაარქვეს ამ ყველაფერში, როგორც სტრუქტური_მესიჯი* /typedef struct სტრუქტურული_მოწერა {char a [32]; int ბ; float c; სიმებიანი დ; bool e; } struct_message; // შექმენით ცვლადი struct_message სახელწოდებით myData struct_message myData; // ფუნქცია იძახება მონაცემების მიღებისას და ბეჭდავს მას ბათილად OnDataRecv (uint8_t * mac, uint8_t * incomingData, uint8_t len) {memcpy (& myData, incomingData, sizeof (myData)); Serial.print ("მიღებული ბიტი:"); სერიული. ბეჭდვა (ლენ); 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 () {// დააყენეთ baud განაკვეთი სერიული კომუნიკაციისთვის ESP Serial.begin (115200); // მოწყობილობის დაყენება Wi-Fi სადგურის WiFi.mode (WIFI_STA); // იწყებს wifi- ს // იწყებს ESP-NOW და უბრუნებს თავის სტატუსს if (esp_now_init ()! = 0) {Serial.println ("ESP-NOW inicialization error"); დაბრუნების; } esp_now_set_self_role (ESP_NOW_ROLE_SLAVE); // განსაზღვრავს ამ esp- ის როლს esp_now_register_recv_cb (OnDataRecv); // დარეკეთ ფუნქცია OnDataRecv ESPNOW მონაცემების მიღების შემდეგ} void loop () {}
ნაბიჯი 6: ცალმხრივი კომუნიკაცია (ESP8266 როგორც გამგზავნი)
ESP8266 აგზავნის მონაცემებს ESP32– ზე. ამ კოდით. შეცვალეთ broadcastAddress თქვენი მიმღების მიმღების mac მისამართით. ჩემი esp32 მისამართი არის 30: AE: A4: F5: 03: A4. Esp8266– ის სხვა ფუნქციებისთვის გადადით აქ
// საჭირო ბიბლიოთეკების დამატება
#მოიცავს // რომ დაამატოთ Wifi შესაძლებლობები ESP32 #include // წვდომა esp- ის ფუნქციებზე // შეინახეთ MAC მისამართი მასივში, სახელად broadcastAddress; uint8_t მაუწყებლობის მისამართი = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*განსაზღვრავს მრავალი ცვლადის მონაცემთა ტიპს, რომელიც სტრუქტურირებულია და დაარქვეს ყველა მათგანს სტრუქტური_მომხსენებლად*/ typedef struct სტრუქტურირებული შეტყობინება {char a [32]; int ბ; float c; სიმებიანი დ; bool e; } struct_message; // სტრუქტურირებული ცვლადის შექმნა myData struct_message myData; // ფუნქცია იძახება მონაცემების გაგზავნისას და დაბეჭდეთ მისი სტატუსი void OnDataSent (uint8_t *mac_addr, uint8_t sendStatus) {Serial.print ("\ r / n ბოლო პაკეტის გაგზავნის სტატუსი: / t"); Serial.println (sendStatus == 1? "მიწოდება წარმატებულია": "მიწოდება ვერ ხერხდება"); } void setup () {// დააყენეთ baud განაკვეთი სერიული კომუნიკაციისთვის ESP Serial.begin (115200); // მოწყობილობის დაყენება Wi-Fi სადგურის WiFi.mode (WIFI_STA); // იწყებს wifi // იწყებს ESP-NOW და უბრუნებს თავის სტატუსს, თუ (esp_now_init ()) {Serial.println ("ESP-NOW ინიციალიზაციის შეცდომა"); დაბრუნების; } esp_now_register_send_cb (OnDataSent); // დარეკეთ ფუნქცია OnDataSent ESPNOW მონაცემების გაგზავნის შემდეგ // დაამატეთ მოწყობილობა დაწყვილებული მოწყობილობების სიაში, თუ (esp_now_add_peer (broadcastAddress, ESP_NOW_ROLE_CONTROLLER, 1, NULL, 0)) {Serial.println ("თანატოლის დამატება ვერ მოხერხდა"); დაბრუნების; }} void loop () {// დააყენეთ მნიშვნელობები strcpy– ს გასაგზავნად (myData.a, "THIS IS A CHAR"); // შეინახეთ "THAR IS CHAR" ჩემი myData.b = ადრე განსაზღვრული ჩემი "მონაცემების" ცვლადში. b = შემთხვევითი (1, 20); // შეინახეთ შემთხვევითი მნიშვნელობა myData.c = 1.2; // შეინახეთ float myData.d = "SP8266"; // შეინახეთ სტრიქონი myData.e = false; // შენახვა bool // მონაცემების გაგზავნა 250 ბაიტზე ნაკლები ან ტოლი ESP-NOW– ით და აბრუნებს მის სტატუსს int result = esp_now_send (broadcastAddress, (uint8_t *) & myData, sizeof (myData)); if (esp_now_init ()! = 0) {Serial.println ("წარმატებით გაიგზავნა"); } else {Serial.println ("მონაცემთა გაგზავნის შეცდომა"); } დაყოვნება (2000); }
ESP32 იღებს მონაცემებს ESP8266– დან. ამ კოდით. სხვა ფუნქციებისათვის მიმართეთ აქ
// საჭირო ბიბლიოთეკების დამატება
#ჩართვა // წვდომა esp- ის ფუნქციებზე #include // რომ დაამატოთ Wifi შესაძლებლობები ESP32- ზე /*განსაზღვრეთ მრავალი ცვლადის მონაცემთა ტიპები სტრუქტურირებული და გადაარქვათ ყველა მათგან struct_message* /typedef struct struct_message {char a [32]; int ბ; float c; სიმებიანი დ; bool e; } struct_message; // შექმენით ცვლადი struct_message სახელწოდებით myData struct_message myData; // ფუნქცია იძახება მონაცემების მიღებისას და ბეჭდავს მას ბათილად OnDataRecv (const uint8_t * mac, const uint8_t * incomingData, int len) {memcpy (& myData, incomingData, sizeof (myData)); Serial.print ("მიღებული ბიტი:"); სერიული. ბეჭდვა (ლენ); 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 () {// დააყენეთ baud განაკვეთი სერიული კომუნიკაციისთვის ESP Serial.begin (115200); // მოწყობილობის დაყენება Wi-Fi სადგურის WiFi.mode (WIFI_STA); // იწყებს wifi- ს // იწყებს ESP-NOW და უბრუნებს თავის სტატუსს if (esp_now_init ()! = 0) {Serial.println ("ESP-NOW inicialization error"); დაბრუნების; } esp_now_register_recv_cb (OnDataRecv); // დარეკეთ ფუნქცია OnDataRecv ESPNOW მონაცემების მიღების შემდეგ} void loop () {}
ნაბიჯი 7: ორმხრივი კომუნიკაცია
ESP32 აგზავნის მონაცემებს გაშვების შესახებ ESP8266- ში. ESP8266 ბეჭდავს მიღებულ შეტყობინებას და შემდეგ პასუხობს ESP32 ბეჭდავს თავის სერიულ მონიტორზე.
ESP32 კოდი
// საჭირო ბიბლიოთეკების დამატება
#მოიცავს // esp– ს წვდომისათვის ახლა შედის ფუნქციები #მოიცავს // დაამატეთ WIFI შესაძლებლობები ESP32– ზე // შეინახეთ MAC მისამართი მასივში სახელად broadcastAddress; uint8_t მაუწყებლობის მისამართი = {0xA4, 0xCF, 0x12, 0xC7, 0x9C, 0x77}; // ჩემი მიმღების MAC მისამართი/*განსაზღვრავს მრავალი ცვლადის მონაცემთა ტიპს, რომელიც სტრუქტურირებულია და დაარქვეს ყველა მას, როგორც struct_message*/typedef struct struct_message {char a [32]; int ბ; float c; სიმებიანი დ; bool e; } struct_message; // შექმნა სტრუქტური_მოწერა, სახელწოდებით myData struct_message myData; // ფუნქცია იძახება, როდესაც მონაცემები იგზავნება დასაბეჭდად მისი სტატუსი void OnDataSent (const uint8_t *mac_addr, esp_now_send_status_t სტატუსი) {Serial.print ("\ r / n ბოლო პაკეტის გაგზავნის სტატუსი: / t"); Serial.println (სტატუსი == ESP_NOW_SEND_SUCCESS? "მიწოდების წარმატება": "მიწოდება ჩაიშალა"); if (სტატუსი! = 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.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 () {// დააყენეთ baud განაკვეთი სერიული კომუნიკაციისთვის ESP Serial.begin (115200); // მოწყობილობის დაყენება Wi-Fi სადგურის WiFi.mode (WIFI_STA); // იწყებს wifi // იწყებს ESP-NOW და უბრუნებს თავის სტატუსს, თუ (esp_now_init ()! = ESP_OK) {Serial.println ("ESP ინიციალიზაციის შეცდომა -ახლა "); დაბრუნების; } // დარეკეთ ფუნქცია OnDataSent ESPNOW მონაცემების გაგზავნის შემდეგ esp_now_register_send_cb (OnDataSent); // რეგისტრაცია peer esp_now_peer_info_t peerInfo; // ინიციალიზაცია და თანატოლების ინფორმაციის მიმწოდებლის მიცემა მიმდევართათვის (peerInfo.peer_addr, broadcastAddress, 6); // დააკოპირეთ broadcastAddress- ის მნიშვნელობა 6 ბაიტით peerInfo.peer_addr peerInfo.channel = 0; // არხი, რომელზეც ესპ ლაპარაკია. 0 ნიშნავს განუსაზღვრელს და მონაცემები გაიგზავნება მიმდინარე არხზე.1-14 არის მოქმედი არხები, რაც იგივეა რაც ადგილობრივ მოწყობილობასთან peerInfo.encrypt = false; // დაშიფრული არ არის // დაამატეთ მოწყობილობა დაწყვილებული მოწყობილობების სიაში, თუ (esp_now_add_peer (& peerInfo)! = ESP_OK) {Serial.println ("თანატოლის დამატება ვერ მოხერხდა"); დაბრუნების; } esp_now_register_recv_cb (OnDataRecv); // დარეკეთ ფუნქცია OnDataRecv ESPNOW მონაცემების მიღების შემდეგ send_data (); } void loop () {} void send_data () {Serial.println ("გაგზავნა"); // მნიშვნელობების დაყენება strcpy- ის გასაგზავნად (myData.a, "THIS IS A CHAR"); // შეინახეთ "THAR IS CHAR" ჩემი myData.b = ადრე განსაზღვრული ჩემი "მონაცემების" ცვლადში. b = შემთხვევითი (1, 20); // შეინახეთ შემთხვევითი მნიშვნელობა myData.c = 1.2; // შეინახეთ float myData.d = "ESP32"; // შეინახეთ სტრიქონი myData.e = false; // შეინახეთ bool // გაგზავნეთ მონაცემები ნაკლები ან ტოლი 250 ბაიტი ESP-NOW– ით და უბრუნებს მის სტატუსს esp_err_t result = esp_now_send (broadcastAddress, (uint8_t *) & myData, sizeof (myData)); if (შედეგი == ESP_OK) {Serial.println ("წარმატებით გაიგზავნა");} სხვა {Serial.println ("მონაცემთა გაგზავნის შეცდომა"); }}
ESP8266 კოდი
// საჭირო ბიბლიოთეკების დამატება
#მოიცავს // რომ დაამატოთ Wifi შესაძლებლობები ESP32 #include // წვდომა esp- ის ფუნქციებზე // შეინახეთ MAC მისამართი მასივში, სახელად broadcastAddress; uint8_t მაუწყებლობის მისამართი = {0x30, 0xAE, 0xA4, 0xF5, 0x03, 0xA4}; /*განსაზღვრავს მრავალი ცვლადის მონაცემთა ტიპს, რომელიც სტრუქტურირებულია და დაარქვეს ყველა მათგანს სტრუქტური_მომხსენებლად*/ typedef struct სტრუქტურირებული შეტყობინება {char a [32]; int ბ; float c; სიმებიანი დ; bool e; } struct_message; // შექმენით ცვლადი struct_message სახელწოდებით myData struct_message myData; // ფუნქცია იძახება მონაცემების მიღებისას და ბეჭდავს მას ბათილად OnDataRecv (uint8_t * mac, uint8_t * incomingData, uint8_t len) {memcpy (& myData, incomingData, sizeof (myData)); Serial.print ("მიღებული ბიტი:"); სერიული. ბეჭდვა (ლენ); 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, "THIS IS CHAR"); // შეინახეთ "THAR IS CHAR" ჩემი myData.b = ადრე განსაზღვრული ჩემი "მონაცემების" ცვლადში. b = შემთხვევითი (1, 20); // შეინახეთ შემთხვევითი მნიშვნელობა myData.c = 1.2; // შეინახეთ float myData.d = "ESP8266"; // შეინახეთ სტრიქონი myData.e = false; // შეინახეთ bool esp_now_send (broadcastAddress, (uint8_t *) & myData, sizeof (myData)); } void setup () {// დააყენეთ baud განაკვეთი სერიული კომუნიკაციისთვის ESP Serial.begin (115200); // მოწყობილობის დაყენება Wi-Fi სადგურის WiFi.mode (WIFI_STA); // იწყებს wifi- ს // იწყებს ESP-NOW და უბრუნებს თავის სტატუსს if (esp_now_init ()! = 0) {Serial.println ("ESP-NOW inicialization error"); დაბრუნების; } if (esp_now_add_peer (broadcastAddress, 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); // დარეკეთ ფუნქცია OnDataRecv ESPNOW მონაცემების მიღების შემდეგ} void loop () {}
ნაბიჯი 8: მითითებები
ESPNOW_32_ მაგალითი
ESPNOW_8266 მაგალითი
WIFI. თ
ESP8266WiFi.h
esp_now.h ESP8266– ისთვის
esp_now.h ESP32– ისთვის
esp_now ოფიციალური დოკუმენტი (ფუნქციების უკეთესი ახსნა)
ESP-NOW ოფიციალური სახელმძღვანელო
გირჩევთ:
როგორ გააკეთოთ WiFi გადართვა ESP8266 გამოყენებით: 5 ნაბიჯი
როგორ გააკეთოთ WiFi გადართვა ESP8266– ის გამოყენებით: ამ გაკვეთილში მე გაჩვენებთ თუ როგორ უნდა გააკეთოთ მავთულის გადართვა ESP8266– ის გამოყენებით. საკომუნიკაციო მედია, რომელსაც მე გამოვიყენებ არის WiFi ქსელი. წინა გაკვეთილზე მე განვიხილე ESP8266– ის გამოყენების შესახებ WiFi ქსელის გამოყენებით. ამის წაკითხვა შეგიძლიათ
ვიბრაციული სენსორის მნიშვნელობის ატვირთვა IOT Thing- ში საუბარი NodeMCU გამოყენებით: 4 ნაბიჯი
ვიბრაციული სენსორის ღირებულების ატვირთვა IOT ThingSpeak– ის გამოყენებით NodeMCU– ს გამოყენებით: არსებობს რამდენიმე კრიტიკული მანქანა ან ძვირადღირებული მოწყობილობა, რომელიც დაზიანებულია ვიბრაციების გამო. ასეთ შემთხვევაში ვიბრაციის სენსორია საჭირო იმის გასარკვევად, აწარმოებს თუ არა მანქანა ან მოწყობილობა ვიბრაციებს. ობიექტის ამოცნობა, რომელიც
საუბარი არდუინოზე. - MP3– ის დაკვრა არდუინოსთან ერთად ყოველგვარი მოდულის გარეშე - MP3 ფაილის Arduino– დან დაკვრა PCM– ის გამოყენებით: 6 ნაბიჯი
საუბარი არდუინოზე. | MP3– ის დაკვრა არდუინოსთან ერთად ნებისმიერი მოდულის გარეშე | Arduino– დან Mp3 ფაილის დაკვრა PCM– ის გამოყენებით: ამ ინსტრუქციებში ჩვენ ვისწავლით თუ როგორ ვითამაშოთ arduino– ით mp3 ფაილი აუდიო მოდულის გამოყენების გარეშე, აქ ჩვენ გამოვიყენებთ PCM ბიბლიოთეკას Arduino– სთვის, რომელიც უკრავს 16 ბიტიან PCM– ს 8kHZ სიხშირით, ასე რომ, ამის გაკეთება
როგორ გააკეთოთ მრავალჯერადი დატენვის შუქნიშანი: 5 ნაბიჯი
როგორ მოვამზადოთ დატენვის შუქნიშანი: ამ ინსტრუქციაში მე გაჩვენებთ როგორ გააკეთოთ მრავალჯერადი დატენვის ლედ ლეპტოპის რამდენიმე ბატარეის გამოყენებით
Raspberry Pi საუბარი ESP8266– თან MQTT– ის გამოყენებით: 8 ნაბიჯი
Raspberry Pi საუბარი ESP8266– თან MQTT– ის გამოყენებით: ამ პროექტში მე აგიხსნით რა არის MQTT პროტოკოლი და როგორ გამოიყენება იგი მოწყობილობებს შორის კომუნიკაციისთვის. შემდეგ, როგორც პრაქტიკული დემონსტრაცია, მე ვაჩვენებ, როგორ დავაყენოთ კლიენტი და ბროკერი სისტემა, სადაც ESP8266 მოდული, ასევე RPi tal