【单片机笔记】STM32+ESP8266通过AT指令WIFI连接阿里云MQTT服务器_单片机发送at指令使wi-fi模块进入ap模式并配置好账户密码方便进行云平台的连接

		sta++;
	}
	else{
		Oled_ShowString(0,2*16,"Server Error!",8,16,1);

// printf(“Conncet Server Error!\r\n”);
sta=0;
}
Oled_RefreshGram();
}

if(sta==3){
	//登录MQTT
	_mqtt.Init(rxbuf,sizeof(rxbuf),txbuf,sizeof(txbuf));		
	if(_mqtt.Connect(
		"123456|securemode=3,signmethod=hmacsha1,timestamp=789|",//ClientID
		"FY-STM32&a1ugBNniFGU",//Username
		"b447b9f26938d8eba6b2a4878066aae91839600c"//Password
		) != 0){
		Oled_ShowString(0,3*16,"Enter MQTT OK!",8,16,1);

// printf(“Enter MQTT OK!\r\n”);
sta++;
}
else{
Oled_ShowString(0,3*16,“Enter MQTT Error”,8,16,1);
// printf(“Enter MQTT Error!\r\n”);
sta=0;
}
Oled_RefreshGram();
}

if(sta==4){
	Oled_Clear();
	//订阅主题
	if(_mqtt.SubscribeTopic("/sys/a1ugBNniFGU/FY-STM32/thing/service/property/set",0,1) != 0){
		Oled_ShowString(0,0*16,"Subscribe OK!",8,16,1);

// printf(“SubscribeTopic OK!\r\n”);
}
else{
Oled_ShowString(0,016,“Subscribe Error!”,8,16,1);
// printf(“SubscribeTopic Error!\r\n”);
}
Oled_RefreshGram();
}
Delay_ms(1000);
Oled_Clear();
Oled_ShowString(32,0
16,“Mars Tech”,8,16,1);
Oled_ShowString(0,116," VCC: 0000 mV",8,16,1);
Oled_ShowString(0,2
16,“Temp: 00.0 C”,8,16,1);
Oled_ShowString(0,316," LUX: 0000 ",8,16,1);
Oled_RefreshGram();
sta = 0;
while(1)
{
if(++cnt_2s>=200){
cnt_2s=0;
Adc_GetValue();
temperature = Ntc_GetTemp(adc_ntc)0.1f;
Oled_ShowNum(8
6,1
16,battery,4,8,16);
Oled_ShowNum(86,216,(u8)temperature,2,8,16);
Oled_ShowNum(86+38,216,(u16)(temperature10)%10,1,8,16);
Oled_ShowNum(86,316,adc_light,4,8,16);

		Oled_RefreshGram();
	}
	if(++cnt_5s>=500){//
		cnt_5s=0;
		sprintf(mqtt_message,
		"{\"method\":\"thing.service.property.set\",\"id\":\"630262306\",\"params\":{\
			\"CurrentTemperature\":%.1f,\
			\"hue\":%d,\
			\"mlux\":%d\
		},\"version\":\"1.0.0\"}",
		temperature,
		rand()%0x00ffffff,
		adc_light
		);
		
		_mqtt.PublishData("/sys/a1ugBNniFGU/FY-STM32/thing/event/property/post",mqtt_message,0);			
	}
	if(_mqtt.rxlen){
		Mqtt_Progress(_mqtt.rxbuf,_mqtt.rxlen);		
		memset(_mqtt.rxbuf,0,_mqtt.rxlen);
		_mqtt.rxlen = 0;
	}			
	Delay_ms(10); 
}

}

void Adc_GetValue(void)
{
u32 sum[ADC_CH_MAX];
memset(sum,0,sizeof(sum));
for(u8 ch=0; ch<ADC_CH_MAX; ch++)
{
for(u8 filter=0; filter<ADC_FILTER; filter++)
{
sum[ch] += _adc.buf[filter][ch];//计算累加和
}
}
adc_light = sum[ADC_LIGHT]/ADC_FILTER;
adc_ntc = sum[ADC_NTC]/ADC_FILTER;
battery = sum[ADC_VCC]/ADC_FILTER3300/409511; //mV
}

u8 temp;
void USART2_IRQHandler(void)
{
static u8 rxlen = 0;

if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) //判断接收数据寄存器是否有数据
{
	temp = USART2->DR;

// USART1->DR = temp;//这里用作串口1打印WIFI模块发送的数据
if(rxlen>=255) rxlen=0;
rxbuf[rxlen++] = temp;
rxlen%=sizeof(rxbuf);
}

if(USART_GetITStatus(USART2, USART_IT_IDLE))
{
	temp = USART2->DR;
	temp = USART2->SR;
	_mqtt.rxlen = rxlen;

// Mqtt_Progress(rxbuf,rxlen);//主循环做异步处理
rxlen=0;
}
}
//void *StrStr(void *dest,void *src);

u8 *p;
void Mqtt_Progress(u8 *buf,u16 len)
{
char *keyStr = “hue”;
u8 keyStrLen = strlen(keyStr)-1;
u8 i,j;
for(i=0;i<len-keyStrLen;i++)
{
for(j=0;j<keyStrLen;j++)
{
if(buf[i+j] != keyStr[j]) break;
}
if(j==keyStrLen) break;
}
if(i<=len-keyStrLen)
{
u16 temp = 0;
p = &buf[i];

	while(*p !&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值