找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2557|回复: 1
打印 上一主题 下一主题
收起左侧

stm32EPC8266连接心知天气网源程序

[复制链接]
跳转到指定楼层
楼主
stm32天气预报基本功能,连接上心知天气网,并解释cJSON格式数据,可以再TFTlcd屏幕显示

单片机源程序如下:
  1. #include "config.h"

  2. Results results[] = {{0}}; //存储json数据的结构体


  3. u8 get_current_weather(char *JSON, Results *results);
  4. int main()
  5. {
  6.         //初始化变量
  7.         u8 i = 0;
  8.   u8 DTH11_Refresh = 0;
  9.         u8 len, t, j, k;
  10.         u8 key = 0;
  11.         u8 duoji = 100;
  12.         u32 sd_size;
  13.         u8 sd_buf[6];
  14.         u32 free,total, sdCapacity;
  15.         u8 Read_ok_flag = 0;
  16.         

  17.         FIL file;                                           //文件对象
  18.   FATFS fatfs;                                   //逻辑驱动器的工作区
  19.   static FRESULT res;                             //FRESULT函数公共结果代码
  20.   char write_buffer[1024];                 //写文件缓冲区
  21.   char read_buffer[1024];                  //读文件缓冲区
  22.         UINT counter;
  23.         
  24.         uint8_t json_buff[512];//接受json数据的缓存数组
  25.         

  26. //char message[1024] = "{ \"results\":[{\"location\":{\"id\":\"wwww4d\",\"name\":\"beijng\",\"country\":\"CN\",\"path\":\"bejing,shanghai,guangzhou\",\"timezone\": \"Asia/Shanghai\",\"timezone_offset\": \"+08:00\"},\"now\":{\"text\":\"12\",\"code\": \"9\",\"temperature\": \"17\"},\"last_update\": \"2021-05-31T10:45:00+08:00\"}]}";
  27. /*-------------------------------------------------------------------------------------------------------------------------------------------------*/
  28. /*-------------------------------------------------------------------------------------------------------------------------------------------------*/
  29.          
  30.         //外设初始化
  31.         SysTick_Init(72);                                                                                                                                                //节拍定时器频率设置 72M
  32.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);                 //设置NVIC中断分组2:2位抢占优先级,2位响应优先级,用于串口助手有数据发送时的中断
  33.         USATR1_Init(115200);                                                                                                                      //串口1初始化为115200        
  34.   USART3_Init(9600);                                                                                                                                   //串口3 树莓派通信 / 语音模块        
  35.         TIM3_Init(2000-1, 720-1);    //周期是20ms  PWM输出
  36.         TIM4_Init(6000-1,36000-1);  //定时3s
  37.         LED_Init();                                                                                                                                          //LED灯初始化
  38.         TFTLCD_Init();                                                                                                                                                         //TFTLCD屏幕初始化
  39.         KEY_Init();                                                                                                                                          //按键初始化
  40.         ESP8266_Init(115200);                                                                                                                   //ESP8266初始化,里面包含串口2的初始化
  41.         RF433M_Init();                                                                                                                                //433M射频模块
  42.         EN25QXX_Init();                                        //初始化falsh
  43.         my_mem_init(SRAMIN);                //初始化内部内存池
  44.         FATFS_Init();                                                        //为fatfs相关变量申请内存  没有这个申请内存,fatfs文件系统就不能用
  45.         RTC_Init();                                                        //RTC时钟
  46.         
  47. /*-------------------------------------------------------------------------------------------------------------------------------------------------*/
  48. /*-------------------------------------------------------------------------------------------------------------------------------------------------*/
  49.          FRONT_COLOR=BLACK;//设置字体为黑色    12号字体,X轴可以0-220 Y轴可以0-380
  50.         LCD_ShowFont12Char(60,0,"智能家居控制");
  51.         LCD_DrawLine(0, 16, 240, 16);  //画线
  52.         LCD_DrawLine(0, 17, 240, 17);
  53.         LCD_DrawLine(0, 130, 240, 130);  //画线
  54.         LCD_DrawLine(0, 131, 240, 131);
  55.         LCD_DrawLine(105, 16,105, 130);  //竖线
  56.         
  57.         FRONT_COLOR=RED;  //设置字体为红色, 打印出错时的字体
  58.   //SD卡
  59.         while(SD_Init()!=0)
  60.         {        
  61.                 LCD_ShowFont12Char(10,30,"SD Card Error!");
  62.         }
  63.   f_mount(fs[0],"0:",1);                                 //挂载SD卡   外设  如果为1那么就会强制的进行加载操作
  64.          f_mount(fs[1],"1:",1);                                 //挂载FLASH.  外设
  65.         //FATF文件系统
  66.         while(FATFS_GetFree("0", &sdCapacity, &free) != 0)
  67.         {
  68.                 LCD_ShowFont12Char(10, 50, "SD Card FAT ERROR!");
  69.         }
  70. //        //温湿度模块
  71. //        while(DHT11_Init())        
  72. //        {
  73. //                LCD_ShowString(130,150,tftlcd_data.width,tftlcd_data.height,16,"DHT11 Error   ");        
  74. //                delay_ms(500);               
  75. //        }
  76.         FRONT_COLOR=BLACK;   //恢复字体为黑色

  77. /*-------------------------------------------------------------------------------------------------------------------------------------------------*/
  78. /*-------------------------------------------------------------------------------------------------------------------------------------------------*/
  79. //温湿度模块数据显示
  80.         LCD_DrawLine(0, 378, 240, 378);  //画线
  81.         LCD_DrawLine(0, 379, 240, 379);
  82.         LCD_ShowString(0,380,tftlcd_data.width,tftlcd_data.height,16,"Temp:   C");
  83.         LCD_ShowString(100,380,tftlcd_data.width,tftlcd_data.height,16,"Humi:   %RH");
  84.         LCD_ShowFont12Char(110,20,"城市:");
  85.         LCD_ShowFont12Char(110,60,"天气:");
  86.         LCD_ShowFont12Char(110,100,"RTC时钟:");

  87. ESP8266_STA_TCPClient_Test();//连接热点+连接服务器


  88.   while(1){

  89.                                 
  90. //  LCD_Clear_one(WHITE,0,150,240, 150);

  91.     get_current_weather((char *)json_buff, results);
  92.                 Clean_buff1();
  93.                 printf("qingchuhou\n%s\n",ESP8266_Fram_Record_Struct .Data_RX_BUF);
  94.                 LCD_ShowString(155,20,175,20,16,results[0].location.name);
  95.                 LCD_ShowString(155,60,175,60,16,results[0].now.text);
  96. //               
  97.                
  98.                 if(strcmp(results[0].now.text, "Sunny") == 0)             LCD_Draw_Picture(0,20,100,120,(u8 *)gImage_shower_rain);        
  99.                 else if(strcmp(results[0].now.text, "Fair") == 0)        LCD_Draw_Picture(0,20,100,120,(u8 *)gImage_fair);
  100.                 else if(strcmp(results[0].now.text, "Cloudy") == 0)        LCD_Draw_Picture(0,20,100,120,(u8 *)gImage_cloudy);
  101.                 else if(strcmp(results[0].now.text, "Mostly_cloudy") == 0)        LCD_Draw_Picture(0,20,100,120,(u8 *)gImage_mostly_cloudy);
  102.                 else if(strcmp(results[0].now.text, "partly_cloudy") == 0)        LCD_Draw_Picture(0,20,100,120,(u8 *)gImage_partly_cloudy);
  103.                 else if(strcmp(results[0].now.text, "moon_cloudy") == 0)        LCD_Draw_Picture(0,20,100,120,(u8 *)gImage_moon_cloudy);
  104.                 else if(strcmp(results[0].now.text, "overcast") == 0)        LCD_Draw_Picture(0,20,100,120,(u8 *)gImage_overcast);
  105.                 else if(strcmp(results[0].now.text, "shower_rain") == 0)        LCD_Draw_Picture(0,20,100,120,(u8 *)gImage_shower_rain);
  106.                 else if(strcmp(results[0].now.text, "thunder_shower") == 0)        LCD_Draw_Picture(0,20,100,120,(u8 *)gImage_thunder_shower);
  107.                 else if(strcmp(results[0].now.text, "hail") == 0)        LCD_Draw_Picture(0,20,100,120,(u8 *)gImage_hail);
  108.                 else if(strcmp(results[0].now.text, "light_rain") == 0)        LCD_Draw_Picture(0,20,100,120,(u8 *)gImage_light_rain);
  109.                 else if(strcmp(results[0].now.text, "moderate_rain") == 0)        LCD_Draw_Picture(0,20,100,120,(u8 *)gImage_moderate_rain);
  110.                 else if(strcmp(results[0].now.text, "heavy_rain") == 0)        LCD_Draw_Picture(0,20,100,120,(u8 *)gImage_heavy_rain);
  111.                 else if(strcmp(results[0].now.text, "storm") == 0)        LCD_Draw_Picture(0,20,100,120,(u8 *)gImage_storm);
  112.                 else if(strcmp(results[0].now.text, "heavy_storm") == 0)        LCD_Draw_Picture(0,20,100,120,(u8 *)gImage_heavy_storm);
  113.                 else if(strcmp(results[0].now.text, "severe_storm") == 0)        LCD_Draw_Picture(0,20,100,120,(u8 *)gImage_severe_storm);
  114.                 else if(strcmp(results[0].now.text, "freezing_rain") == 0)        LCD_Draw_Picture(0,20,100,120,(u8 *)gImage_freezing_rain);
  115.                 else if(strcmp(results[0].now.text, "snow_flurry") == 0)        LCD_Draw_Picture(0,20,100,120,(u8 *)gImage_snow_flurry);
  116.                 else if(strcmp(results[0].now.text, "light_snow") == 0)        LCD_Draw_Picture(0,20,100,120,(u8 *)gImage_light_snow);
  117.                 else if(strcmp(results[0].now.text, "moderate_snow") == 0)        LCD_Draw_Picture(0,20,100,120,(u8 *)gImage_moderate_snow);
  118.                 else if(strcmp(results[0].now.text, "heavy_snow") == 0)        LCD_Draw_Picture(0,20,100,120,(u8 *)gImage_heavy_snow);
  119.                 else if(strcmp(results[0].now.text, "snow_storm") == 0)        LCD_Draw_Picture(0,20,100,120,(u8 *)gImage_snow_storm);
  120.                 else if(strcmp(results[0].now.text, "dust") == 0)        LCD_Draw_Picture(0,20,100,120,(u8 *)gImage_dust);
  121.                 else if(strcmp(results[0].now.text, "sand") == 0)        LCD_Draw_Picture(0,20,100,120,(u8 *)gImage_sand);
  122.                 else if(strcmp(results[0].now.text, "sand_storm") == 0)        LCD_Draw_Picture(0,20,100,120,(u8 *)gImage_sand_storm);
  123.                 else if(strcmp(results[0].now.text, "dust_storm") == 0)        LCD_Draw_Picture(0,20,100,120,(u8 *)gImage_dust_storm);
  124.                 else if(strcmp(results[0].now.text, "foggy") == 0)        LCD_Draw_Picture(0,20,100,120,(u8 *)gImage_foggy);
  125.                 else if(strcmp(results[0].now.text, "haze") == 0)        LCD_Draw_Picture(0,20,100,120,(u8 *)gImage_haze);
  126.                 else if(strcmp(results[0].now.text, "windy") == 0)        LCD_Draw_Picture(0,20,100,120,(u8 *)gImage_windy);
  127.                 else if(strcmp(results[0].now.text, "gale") == 0)        LCD_Draw_Picture(0,20,100,120,(u8 *)gImage_gale);
  128.                 else if(strcmp(results[0].now.text, "hurricane") == 0)        LCD_Draw_Picture(0,20,100,120,(u8 *)gImage_hurricane);
  129.                 else if(strcmp(results[0].now.text, "cold") == 0)        LCD_Draw_Picture(0,20,100,120,(u8 *)gImage_cold);
  130.                 else if(strcmp(results[0].now.text, "hot") == 0)        LCD_Draw_Picture(0,20,100,120,(u8 *)gImage_hot);
  131.                 else{        
  132.                             LCD_Draw_Picture(0,20,100,120,(u8 *)gImage_unknown);
  133.                 }
  134.                
  135.                
  136.                
  137.                
  138.                           }

  139.         return 0;
  140.                                                          
  141. }





  142. //获取一次实时天气
  143. //返回:0---获取成功,1---获取失败
  144. u8 get_current_weather(char *JSON, Results *results)
  145. {

  146.         while(!ESP8266_UnvarnishSend());//返回1:配置成功 0:配置失败
  147.         //printf("清除前%s\n",ESP8266_Fram_Record_Struct .Data_RX_BUF);
  148.         Clean_buff();
  149.         //printf("清除后%s\n",ESP8266_Fram_Record_Struct .Data_RX_BUF);
  150.         ESP8266_SendString(ENABLE, "GET api.seniverse点com/v3/weather/now.json?key=S1EB-JUvy4icX5_CO&location=Wuxi&language=en&unit=c\r\n", 0, Single_ID_0 );
  151.         delay_ms(1000);
  152.         strcpy(JSON,(char *)ESP8266_Fram_Record_Struct .Data_RX_BUF);
  153.         cJSON_WeatherParse( JSON, results);
  154.         //Clean_buff1();
  155.         ESP8266_ExitUnvarnishSend();                                        //退出透传
  156. //获取三天的天气(包括今日)
  157.         //ESP8266_SendString(ENABLE, "GET api.seniverse点com/v3/weather/daily.json?key=50alegxkcaehcge6&location=wuxi&language=en&unit=c&start=0&days=5\r\n", 0, Single_ID_0 );

  158.         return 0;
  159. }
复制代码

所有资料51hei提供下载:
smartHouse.7z (451.21 KB, 下载次数: 40)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏4 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:64089 发表于 2021-7-6 16:15 | 只看该作者
谢谢楼主分享,很好的学习资料
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表