沥沥小鱼 2024-05-23 22:08 采纳率: 45.5%
浏览 19

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

在B站看到一个stm32连接物联网平台完成温湿度数据显示在OLED上的视频 拿up代码试了一下效果 失败了 OLED显示 errorng 并返回错误码1 想问问大家知道是什么原因导致连接失败的吗

img

这是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 <stdio.h>
#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

  • 写回答

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显示屏应该能够正确显示温湿度数据和开关状态。

    推荐相关链接:

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

    评论 编辑记录

报告相同问题?

问题事件

  • 修改了问题 5月23日
  • 创建了问题 5月23日