关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 西红柿炒番茄不加生姜 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 元
提供问题酬金的用户不参与问题酬金结算和分配
支付即为同意
《付费问题酬金结算规则》 结题 再想想 删除 再等等