完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
嗨朋友们!我一直在研究一个代码,它基本上提取了我之前存储在 ESP8266 闪存中的 wifi 网络的凭据。问题是,当我使用 Wifi.begin() 功能时,它没有连接到网络,因为凭据中有错误的字符。我添加了代码,并在代码中添加了一些关于我检测到问题的地方的注释。非常感谢!
~~~~~~~~~~~~~~~~~~~~~~~~~ #include /* 此草图尝试根据给定列表连接到最佳 AP */ #include "FS.h" #include #include bool spiffsActive = false; 字符串json; int Pin1 = 1;// 已连接 TX azul int Pin4 = 3;// 已连接 RX amarillo #include #include // 0018 之后的 Arduino 版本需要 #include #include #include #include "DHT.h" #define DHTPIN 2 #define DHTTYPE DHT11 #include #include "SSD1306.h" bool activateWifiManager = false; 内部竞争者; int listoparaenviar = 0; 常量字符* ssidjson; 常量 char* passwordjson; 常量字符 *ssidwifi ; const char * 密码wifi; const char* ssidSmartCentral="SmartCentral"; const char* incomingSsidwifi ; 无符号整数 localPort = 8888; 字符串路由器SSID; 字符串路由器密钥; int salvarConfig = 0; char packetBuffer[UDP_TX_PACKET_MAX_SIZE]; //保存传入数据包的缓冲区, //int D0; int 活动 = 0; int salvarSSID = 0; int 萨尔瓦密码 = 0; 字符串状态2; WiFi管理器wm; WiFiUDP UDP; DHT dht(DHTPIN, DHTTYPE); SSD1306 显示器(0x3c、4、3);// revisar los pines de comunicacion a lo mejor lo q chiva el json son los pines q se usan para otra cosa #define flipDisplay true uint8_t MAC_array[6]; 字符 MAC_char[18]; IP地址服务器; 字符串 ipadd; String paquete = "esperando"; void writeDisplay(String mostrar,int espera) {display.clear(); display.setFont(ArialMT_Plain_16); display.drawString(0, 0, 显示); 显示.显示(); 延迟(espera); } void SerializeObject(String wifi_ssid, String pass_wifi) { StaticJsonDocument<300> 文档; doc["SSID"] = wifi_ssid; 文档[“密码”] = pass_wifi; serializeJson(文档,json); 序列号.println(json); } void DeserializeObject(String desjson) { StaticJsonDocument<300> 文档; DeserializationError err = deserializeJson(doc, desjson); 如果(错误){writeDisplay(“无 JSON”,5000); 返回; } ssidjson = doc["SSID"]; passwordjson = doc["密码"]; } /** 描述 contenido en un archivo string state - contenido a escribir en el archivo string path - archivo que se va a escribir */ void writeFile(String state, String path) { File rFile = SPIFFS.open(path, "w+ "); 如果(!rFile){ Serial.println(“错误 abriendo!”); } else { rFile.println(state); Serial.println(状态); } rFile.close(); } void appendFile(String state, String path) { File rFile = SPIFFS.open(path, "a+"); 如果(!rFile){ Serial.println(“错误!”); rFile.println(状态); Serial.println(状态); } rFile.close(); } /** el contenido de un archivo param cadena path - archivo que se va a leer return string - contenido leído del archivo */ String readFile(String path) { File rFile = SPIFFS.open(path, "r"); } 如果(!rFile){ Serial.println(“错误!”); } 字符串内容 = rFile.readStringUntil('\r'); Serial.print("阅读状态:"); Serial.println(内容); rFile.close(); 返回内容; } /* * @desc initializa el sistema de archivos */ void openFS(void) { if (!SPIFFS.begin()) { Serial.println("\nError abriendo archivo spiffs"); } else { Serial.println("\nSuccess initiando Spiffs!"); } } void setup() { Serial.begin(115200); 延迟(10); dht.开始(); 显示.init(); 如果 (flipDisplay) display.flipScreenVertically(); writeDisplay("开始",3000); Udp.begin(localPort); WiFi.mode(WIFI_STA); 延迟(1000); // 启动归档子系统 if (SPIFFS.begin()) { Serial.println("SPIFFS Active"); // 序列号.println(); spiffsActive = 真; } 别的 { //Serial.println("无法激活 SPIFFS"); } 延迟(2000); 打开文件系统(); state2 = readFile("/config.txt"); 反序列化对象(state2); 延迟(1000); ssidwifi=ssidjson; 密码wifi=密码json; Serial.println(ssidwifi);////这里一切正常 Serial.println(passwordwifi); WiFi.begin(ssidwifi, passwordwifi); // Serial.println(ssidwifi);//////这里的凭据有错误的字符 Serial.println(passwordwifi); 写显示(ssidwifi,3000); writeDisplay(密码wifi,3000); writeDisplay("正在搜索",3000); //////////////////////////////////////////////// //levantar el hotspot si no se conecta while (WiFi.status() != WL_CONNECTED) { // Serial.println("WiFi 未连接!"); writeDisplay("等待wifi",100); 竞争者++; if (contador == 1800) ///se cumple el minuto sin conectarse a la central { writeDisplay("No central",5000); activateWifiManager = true; //休息; } } if (activateWifiManager == true) ///激活热点propio { bool res; writeDisplay("启动 AP",3000); res = wm.autoConnect("智能传感器", "12345678"); routerSSID = WiFi.SSID().c_str(); //cojo clave y routerKey = WiFi.psk().c_str(); passwordwifi = routerKey.c_str(); SerializeObject(ssidwifi, passwordwifi); writeFile(json, "/config.txt"); //los guardo } else ///////// se conecta a la central directamente { writeDisplay("central found",3000); IPAddress broad = WiFi.localIP(); 广泛[3] = 255; Udp.beginPacket(广泛,8888); Udp.write("凭据"); Udp.endPacket(); //////////////esperar las credenciales para conectarse a la red&////// while(salvarSSID == 0) { writeDisplay("Waiting credentials",100); int packetSize = Udp.parsePacket(); 如果(数据包大小) { IPAddress remote = Udp.remoteIP(); Udp.read(packetBuffer, UDP_TX_PACKET_MAX_SIZE); //串行打印(“内容:”); String mensaje = packetBuffer; Serial.println(mensaje); 如果 (mensaje.substring(0, 4) == "net:") {String credentials = String (mensaje.substring(4)); 反序列化对象(凭证); 萨尔瓦SSID = 1; writeDisplay("序列化",3000); SerializeObject(incomingSsidwifi, incomingPasswordwifi); 延迟(2000); writeFile(json, "/config.txt"); ssidwifi=incomingSsidwifi ; passwordwifi=传入密码wifi; } memset(packetBuffer, 0, sizeof(packetBuffer)); writeDisplay("显示信誉",3000); 写显示(ssidwifi,3000); writeDisplay(密码wifi,3000); 延迟(2000); WiFi.begin(ssidwifi, passwordwifi); 延迟(3000); if(WiFi.status() == WL_CONNECTED) {writeDisplay("Wifi ok",5000); 写显示(ssidwifi,3000); writeDisplay(密码wifi,3000); } } /////////////////aqui ya el se conecto al router////////////////////// ////////// IPAddress broad = WiFi.localIP(); 广泛[3] = 255; String dir_Mac = WiFi.macAddress(); //cojo la direccion mac Serial.print("Direccion MAC"); Serial.println(dir_Mac); WiFi.macAddress(MAC_array); 对于 (int i = 0; i < sizeof(MAC_array); i++) { sprintf(MAC_char, "%s%02x", MAC_char, MAC_array[i]); } Serial.print("MAC CON 数组:"); Serial.println(MAC_char); writeDisplay("发送中",3000); Udp.beginPacket(广泛,8888);//广播方向 //envia un paquete a todos los elementos de la red // el servidor debe almacenar esta direccion Udp.write("sentemp:"); Udp.write(MAC_char); Udp.endPacket(); 延迟(10); while (paquete == "esperando") { writeDisplay("等待",3000); int packetSize = Udp.parsePacket(); // 将数据包读入 packetBuffer Udp.read(packetBuffer, UDP_TX_PACKET_MAX_SIZE); paquete = packetBuffer; 如果 (paquete == "sincronizado") server = Udp.remoteIP(); listoparaenviar = 1; } if (paquete == "esperando") { Udp.beginPacket(broad, 8888); Udp.write("sentemp:"); Udp.write(MAC_char); Udp.endPacket(); 延迟(10); } } writeDisplay("Sincronized",3000); } void loop() { if(listoparaenviar==1) {char* buffn=""; 字符缓冲区[1024] =“”; float humedad = dht.readHumidity(); // 读取摄氏温度 float temp = dht.readTemperature(true); // 检查是否有任何读取失败并提前退出(重试)。 如果 (isnan(humedad) || isnan(temp) ) { 返回; } dtostrf(temp,3,2,buffn); sprintf(缓冲区,buffn); Udp.beginPacket(服务器,8888); Udp.write(缓冲区); Udp.endPacket(); 显示.clear(); display.setFont(ArialMT_Plain_24); display.drawString(0, 0, 缓冲区); 显示.显示(); 延迟(10000); } if (WiFi.status() != WL_CONNECTED) ///se cayo la conexion por alguna razon { writeDisplay("LOST CONN",1000); listoparaenviar=0; } 否则 {listoparaenviar=1; } } ~~~~~~~~~~~~~~~~~~~ 这是串行监视器返回的内容: ~~~~~~~~~~~~~~~~~~~ ~~~~ Success iniciando Spiffs! 阅读状态:{"SSID":"SmartCentral","PASSWORD":"12345678"} SmartCentral 12345678 @⸮⸮⸮? ~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
961 浏览 1 评论
552浏览 6评论
461浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
446浏览 5评论
447浏览 4评论
417浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-26 13:10 , Processed in 0.837291 second(s), Total 79, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号