• stm32|esp8266|阿里云平台|温湿度


    关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 西红柿炒番茄不加生姜 2024-05-23 22:08 采纳率: 55.6% 浏览 6 首页/ 开放平台 / stm32|esp8266|阿里云平台|温湿度 物联网stm32阿里云 在B站看到一个stm32连接物联网平台完成温湿度数据显示在OLED上的视频 拿up代码试了一下效果 失败了 OLED显示 errorng 并返回错误码1 想问问大家知道是什么原因导致连接失败的吗 这是esp.c模块代码 const char* passwd="e867faf263c26f609dc5518d8917f0204767f33dc0c18c6196371462a8e8a47f"; const char* Url="iot-06z00dv10v8ayzu.mqtt.iothub.aliyuncs.com"; const char* pubtopic="/sys/k16i2OToZBK/testDevice2/thing/event/property/post"; const char* subtopic="/sys/k16i2OToZBK/testDevice2/thing/event/property/post_reply"; const char* func1="temperature"; const char* func2="Humidity"; const char* func3="PowerSwitch_1"; const char* func4="PowerSwitch_2"; int fputc(int ch,FILE *f ) //printf重定向 { USART_SendData(USART1,(uint8_t)ch); while(USART_GetFlagStatus (USART1,USART_FLAG_TC) == RESET); return ch; } char esp_Init(void) { memset(RECS,0,sizeof(RECS)); printf("AT+RST\r\n"); //重启 Delay_ms(2000); memset(RECS,0,sizeof(RECS)); printf("ATE0\r\n"); //关闭回显 Delay_ms(1000); if(strcmp(RECS,"OK")) return 1; printf("AT+CWMODE=1\r\n"); //Station模式 Delay_ms(1000); if(strcmp(RECS,"OK")) return 2; memset(RECS,0,sizeof(RECS)); printf("AT+CWJAP=\"%s\",\"%s\"\r\n",WIFI,WIFIASSWORD); //连接热点 Delay_ms(2000); if(strcmp(RECS,"OK")) return 3; memset(RECS,0,sizeof(RECS)); printf("AT+MQTTUSERCFG=0,1,\"%s\",\"%s\",\"%s\",0,0,\"\"\r\n",ClintID,username,passwd);//用户信息配置 Delay_ms(10); if(strcmp(RECS,"OK")) return 4; memset(RECS,0,sizeof(RECS)); printf("AT+MQTTCONN=0,\"%s\",1883,1\r\n",Url); //连接服务器 Delay_ms(1000); if(strcmp(RECS,"OK")) return 5; printf("AT+MQTTSUB=0,\"%s\",1\r\n",subtopic); //订阅消息 Delay_ms(500); if(strcmp(RECS,"OK")) return 5; memset(RECS,0,sizeof(RECS)); return 0; } //功能:esp发送消息 //参数:无 //返回值:0:发送成功;1:发送失败 char Esp_PUB(void) { memset(RECS,0,sizeof(RECS)); printf("AT+MQTTPUB=0,\"%s\",\"{\\\"method\\\":\\\"thing.event.property.post\\\"\\,\\\"params\\\":{\\\"%s\\\":%d\\,\\\"%s\\\":%d\\,\\\"%s\\\":%d\\,\\\"%s\\\":%d}}\",0,0\r\n",pubtopic,func1,Temperature,func2,Shidu,func3,Switch1,func4,Switch2); //while(RECS[0]);//等待ESP返回数据 Delay_ms(200);//延时等待数据接收完成 if(strcmp(RECS,"ERROR")==0) return 1; return 0; } void CommandAnalyse(void) { if(strncmp(RECS,"+MQTTSUBRECV:",13)==0) { uint8_t i=0; while(RECS[i++] != '\0') { if(strncmp((RECS+i),func3,12)==0) { while(RECS[i++] != ':'); Switch1=RECS[i]; } if(strncmp((RECS+i),func4,12)==0) { while(RECS[i++] != ':'); Switch2=RECS[i]; } } } } 这是main函数 #include "stm32f10x.h" // Device header #include "OLED.H" #include #include "Delay.h" #include "MyUSART.H" #include "esp.h" #include "DHT11.H" #include "MySPI.H" #include "Timer.H" #include "PWM.H" int Temperature; int Shidu; uint8_t Switch1; uint8_t Switch2; extern char RECS[200]; extern char Data[5]; uint16_t cnt; void Init(void) { uint8_t Judge=0; OLED_Init(); OLED_ShowString(1,1,"Linking..."); MyUSART_Init(); //初始化串口 //Timer_Init(); PWM_Init(); do { Judge = esp_Init(); OLED_ShowString(1,1,"error code: "); OLED_ShowNum(2,1,Judge,1); }while(Judge); //连接阿里云直到成功 RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOA ,ENABLE); GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_0; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA,&GPIO_InitStructure); GPIO_ResetBits(GPIOA,GPIO_Pin_2);//LED初始化为低电平(关) } int main(void) { Init(); OLED_ShowString(3,1,"Switch1 Switch2"); OLED_ShowString(1,1,"Tempera Humidi"); while(1) { cnt++; if(cnt%150==0) DHT11_GetData(); //约每1s执行一次温湿度采集 if(cnt==600) //约每6s执行一次数据上报 { if(Esp_PUB() == 1) { OLED_ShowString(1,1,"publish failed"); Delay_ms(500); OLED_Clear(); } cnt=0; } Shidu=Data[0]; Temperature=Data[2]; OLED_ShowNum(2,2,Temperature,2);OLED_ShowNum(2,13,Shidu,2); OLED_ShowChar(4,2,Switch1);OLED_ShowChar(4,13,Switch2); if(Switch1=='0') PWM_SetCompare(5); else if(Switch1=='1') PWM_SetCompare(15); if(Switch2=='0') GPIO_ResetBits(GPIOA,GPIO_Pin_2); else if(Switch2=='1') GPIO_SetBits(GPIOA,GPIO_Pin_2); } } //void TIM2_IRQHandler(void) //{ // if(TIM_GetITStatus(TIM2,TIM_IT_Update) == SET) // { // TIM_ClearITPendingBit (TIM2,TIM_IT_Update); // } //} 我看的是B站up主CS_Mak-er 展开全部 收起 写回答 好问题 0 提建议 追加酬金 关注问题 微信扫一扫 点击复制链接 分享 邀请回答 编辑 收藏 删除 结题 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 0 (可追加 ¥500) ¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付 二维码出错 点击刷新 支付金额 15 元 提供问题酬金的用户不参与问题酬金结算和分配 支付即为同意 《付费问题酬金结算规则》 结题 再想想 删除 再等等

    1条回答 默认 最新

    • 阿里嘎多学长 2024-05-23 22:40
      关注

      以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


      您提问的目的:

      您的问题是要解决在使用STM32连接ESP8266模块,并通过阿里云物联网平台发布温湿度数据到OLED显示时,遇到的错误问题。具体表现为OLED显示“errorng”并返回错误码1,您希望了解导致连接失败的原因,并寻求解决方案。

      图片内容:

      图片中显示的是一串十六进制数字和字母的组合(812813B148),这可能是用来表示某种错误状态码或特定的信息。图片还包含了用户名和密码的占位符,但没有提供具体的用户名和密码。

      问题出现原因:

      1. 用户名或密码错误:图片中显示的用户名和密码是占位符,需要替换为有效的用户名和密码。
      2. 网络连接问题:ESP8266模块可能无法连接到指定的Wi-Fi热点。
      3. MQTT连接问题:ESP8266模块可能无法连接到阿里云物联网平台的MQTT服务器。
      4. 代码逻辑错误:可能存在代码逻辑上的错误,导致无法正确处理连接过程或数据发送。

      问题解决方案:

      1. 检查用户名和密码:确保passwdClintIDusername变量中填写的是正确的用户名和密码。
      2. 检查网络连接:确保ESP8266模块能够成功连接到Wi-Fi网络。
      3. 检查MQTT配置:确保MQTT服务器地址、端口号和主题设置正确。
      4. 调试代码:逐步调试代码,检查每一步是否按预期执行。

      提供代码:

      由于无法访问完整的代码环境,无法提供具体的修改代码。但是,您可以参考以下建议进行调试:

      • 确保WIFIWIFIASSWORD变量被正确初始化。
      • esp_Init函数中添加更多的调试信息,以便于跟踪每一步的执行情况。
      • 使用串口助手等工具监控ESP8266模块的AT指令执行结果。

      代码运行方式:

      • 需要STM32开发板和ESP8266模块。
      • 需要安装STM32CubeMX或类似软件来配置和烧录代码。
      • 使用串口助手或类似工具来监控串口输出。

      代码预期运行结果:

      如果问题得到解决,STM32应该能够成功连接到ESP8266模块,并通过MQTT协议将温湿度数据发送到阿里云物联网平台,同时OLED显示屏应该能够正确显示温湿度数据和开关状态。

      推荐相关链接:

      请注意,以上链接仅为示例,您需要根据实际情况查找和访问相关资源。

      展开全部

      评论 编辑记录
      编辑
      预览

      报告相同问题?

    • 相关阅读:
      PW7014替代ETA7014:高崩溃电压、低成本、强性能,市场新宠儿
      面渣逆袭:MySQL六十六问,两万字+五十图详解
      第14章 C++的代码重用
      redis
      十二烷基硫酸钠(SDS)将Fe3O4磁性纳米粒子定量地修饰到多壁碳纳米管|化学试剂
      电脑一键重装系统后连不上远程了?教你设置的方法
      ASP.NET Core教程
      JS学习762~780(注册事件+删除事件+DOM事件流+事件对象+阻止事件冒泡+事件委托鼠标事件+键盘事件)
      创建型-配置工厂
      Day656.数据传输加密问题 -Java业务开发常见错误
    • 原文地址:https://ask.csdn.net/questions/8108430