完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我是一名新手,正在从事一个项目,使用两块采用 ESP-NOW 协议的 ESP8266 板将传感器数据从主机发送到从机。
共享的代码成功发送数据并在串行监视器上显示。 现在我正在尝试包括“Adafruit_SSD1306”128x32 显示器以显示我的主设备在从属设备上的状态。master 和 slave 代码都运行良好,没有任何错误,但是在从机上接收数据时,设备正在重启,我发现 ESP8266 在执行“SenderStatus()”函数中编写的“SSD130”显示命令行时正在重启”。 if(atoi(value)==500) { Serial.println("状态 1 就绪"); /* display.clearDisplay(); // 清除显示 display.setCursor(10,13); display.setTextSize(1); display.setTextColor (白色); display.print ("状态 1 就绪"); display.display();// 延迟(2000); */ } 我尝试在“清除显示”命令之前的函数中再次添加“SSD1306 分配”命令,但没有成功。我该如何解决这个问题以使用 SSD1306 在从属设备上显示状态。 掌握: 代码:全选#include #include extern "C" { #include } // this is the MAC Address of the slave which receives the data uint8_t mac[] = {0xDA, 0xBC, 0xC2, 0x11, 0x11, 0x11}; #define WIFI_CHANNEL 4 // must match the slave struct struct __attribute__((packed)) DataStruct { char text[15]; }; DataStruct Data; //======================================================================================= void setup() { Wire.begin(4,5); Serial.begin(115200); WiFi.mode(WIFI_STA); // Station mode for esp-now controller WiFi.disconnect(); Serial.printf("This mac: %s, ", WiFi.macAddress().c_str()); Serial.printf("slave mac: %02x%02x%02x%02x%02x%02x", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); Serial.printf(", channel: %i\n", WIFI_CHANNEL); if (esp_now_init() != 0) { Serial.println("*** ESP_Now initialization failed"); } esp_now_set_self_role(ESP_NOW_ROLE_CONTROLLER); esp_now_add_peer(mac, ESP_NOW_ROLE_SLAVE, WIFI_CHANNEL, NULL, 0); strcpy(Data.text,""); delay(2000); strcpy(Data.text,"500"); //status 1 sendData(); delay(2000); strcpy(Data.text,"600"); //status 2 sendData(); delay(2000); strcpy(Data.text,"700"); //status 3 sendData(); delay(2000); strcpy(Data.text,"800"); //status 4 sendData(); delay(2000); Serial.println("Setup finished"); } //======================================================================================= void loop() { ReadSensor(); sendData(); } //============================================================================================ void ReadSensor() { char S_text[10]; double sensor=380.21; // dummy sensor value dtostrf(sensor, 3, 2, S_text); strcpy(Data.text,S_text); } void sendData() { uint8_t bs[sizeof(Data)]; memcpy(bs, &Data, sizeof(Data)); esp_now_send(NULL, bs, sizeof(Data)); Serial.println(Data.text); } 奴隶: 代码:全选#include extern "C" { #include #include } uint8_t mac[] = {0xDA, 0xBC, 0xC2, 0x11, 0x11, 0x11}; //==============Display============= // Declaration for an SSD1306 display connected to I2C (SDA, SCL pins) #include #include #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 32 // OLED display height, in pixels #define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin) Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); void initVariant() { WiFi.mode(WIFI_AP); wifi_set_macaddr(SOFTAP_IF, &mac[0]); } //============== #define WIFI_CHANNEL 4 // must match the controller struct struct __attribute__((packed)) DataStruct { char text[15]; }; DataStruct myData; int8_t flag=0; //================================================================================== void setup() { Serial.begin(115200); Serial.println(); Serial.println("Starting...."); Serial.print("AP mac: "); Serial.println(WiFi.softAPmacAddress()); Serial.print("STA mac: "); Serial.println(WiFi.macAddress()); //display Wire.begin(4,5); // SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3C for 128x32 Serial.println(F("SSD1306 allocation failed")); for(;;); // Don't proceed, loop forever } // Show initial display buffer contents on the screen -- // the library initializes this with an Adafruit splash screen. delay(2000); // Pause for 2 seconds display.clearDisplay (); // clear display display.setCursor(20,13); display.setTextSize(1); display.setTextColor (WHITE); display.print ("Starting...."); display.display ();// delay(2000); display.clearDisplay (); // clear display display.setCursor (12,8); // position the cursor display.setTextSize (2); // medium size font display.setTextColor (WHITE); // white is not default ! display.print ("Hello"); display.display ();// delay(2000); //ESP Initialize if (esp_now_init()!=0) { Serial.println("*** ESP_Now init failed"); while(true) {}; } esp_now_set_self_role(ESP_NOW_ROLE_SLAVE); esp_now_register_recv_cb(receiveCallBackFunction); Serial.println("End of setup - waiting for messages"); } //======================================================================================= void loop() { } //======================================================================================= void receiveCallBackFunction(uint8_t *senderMac, uint8_t *incomingData, uint8_t len) { memcpy(&myData, incomingData, sizeof(myData)); if(flag<=3) { SenderStatus(); } Serial.println(myData.text); } void SenderStatus() { char value[15]; strcpy(value,myData.text); if(atoi(value)==500) { Serial.println("Status 1 Ready"); display.clearDisplay (); // clear display (restarting while executing these line) display.setCursor(10,13); display.setTextSize(1); display.setTextColor (WHITE); display.print ("Status 1 Ready"); display.display ();// delay(2000); } else if(atoi(value)==600) { Serial.println("Status 2 Ready"); display.clearDisplay (); // clear display display.setCursor(18,13); display.setTextSize(1); display.setTextColor (WHITE); display.print ("Status 2 Ready"); display.display ();// delay(2000); } else if(atoi(value)==700) { Serial.println("Status 3 Ready"); display.clearDisplay (); // clear display display.setCursor(18,13); display.setTextSize(1); display.setTextColor (WHITE); display.print ("Status 3 Ready"); display.display ();// delay(2000); } else if(atoi(value)==800) { Serial.println("Status 4 Ready"); display.clearDisplay (); // clear display display.setCursor(18,13); display.setTextSize(1); display.setTextColor (WHITE); display.print ("Status 4 Ready"); display.display ();// delay(2000); Serial.println("Receiving Data"); display.clearDisplay (); // clear display display.setCursor(18,13); display.setTextSize(1); display.setTextColor (WHITE); display.print ("Receiving Data"); display.display ();// } flag++; } |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
528浏览 6评论
438浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
425浏览 5评论
423浏览 4评论
399浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-9 09:36 , Processed in 0.562463 second(s), Total 46, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号