下面我们看下主函数的代码,思路也比较清晰:
int main(void)
{
static char meassage[200];
int rc;
char *led;
char led_value;
float temperature,humidity,light,pressure;
srand(0);
//配置LED灯引脚
LED_Config();
//初始化配置网络
network_init();
while(1){
memset(meassage,0,sizeof(meassage));
//订阅消息
rc = mqtt_subscrib(“pyboard_led”,meassage);
printf(“rc = %d\n\r”,rc);
if(rc >= 0){
printf(“meassage = %s\n\r”,meassage);
//解析JSON格式字符串并点亮相应的LED灯
cJSON *root = cJSON_Parse(meassage);
if(root != NULL){
led = cJSON_GetObjectItem(root,”led”)->valuestring;
printf(“led = %s\n\r”,led);
led_value = cJSON_GetObjectItem(root,”value”)->valueint;
if(!strcmp(led,”red”)){
if(led_value){
LED_On(LED_RED);
}else{
LED_Off(LED_RED);
}
}else if(!strcmp(led,”green”)){
if(led_value){
LED_On(LED_GREEN);
}else{
LED_Off(LED_GREEN);
}
}else if(!strcmp(led,”blue”)){
if(led_value){
LED_On(LED_BLUE);
}else{
LED_Off(LED_BLUE);
}
}else if(!strcmp(led,”yellow”)){
if(led_value){
LED_On(LED_YELLOW);
printf(“Yellow On\n\r”);
}else{
LED_Off(LED_YELLOW);
printf(“Yellow Off\n\r”);
}
}
// 释放内存空间
cJSON_Delete(root);
}else{
printf(“Error before: [%s]\n\r”,cJSON_GetErrorPtr());
}
}
delay_ms(500);
//获取传感器测量数据,该示例使用随机数
temperature = rand()%50;
humidity = rand()%100;
light = rand()%1000;
pressure = rand()%1000;
//将数据合成为JSON格式数据
sprintf(meassage,”{\”temperature\”:%.1f,\”humidity\”:%.1f,\”light\”:%.1f,\”pressure\”:%.1f}”,temperature,humidity,light,pressure);
//将数据发送出去
mqtt_publish(“pyboard_value”,meassage);
}
} |