收藏官网首页
查看: 605|回复: 7

[资料] 战舰V3通过ESP8266获得网络天气

32

主题

292

帖子

1102

积分

版主

Rank: 7Rank: 7Rank: 7

积分
1102
发表于 2017-11-26 11:32:44 | 显示全部楼层 |阅读模式
注册成为机智云开发者,手机加虚拟设备快速开发
本帖最后由 Genius 于 2017-11-27 09:50 编辑

之前用8266和机智云成功通信了,见 帖子 http://club.gizwits.com/thread-8048-1-1.html  但是一直不知道8266是怎么设置联网,因为这个是下载的机智云的固件。后来就寻思着做了这个网络天气的。网上几乎没有人用STM32做天气的,基本上都是用arduino或者直接用esp8266+oled。

一、
硬件:战舰V3 + ESP8266 + 2.8寸屏
软件:1、esp8266的配置
         2、连接天气的服务器,get API数据
         3、cjson的移植与解析
         4、UTF8转GBK转码,这个网上很少例程
         5、图标的取模

   首先配置esp8266为透传模式


01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

while(atk_8266_send_cmd("AT","OK",20))//¼ì2éWIFIÄ£¿éêÇ·ñÔúÏß
        {
                atk_8266_quit_trans();//íË3öí¸′«
                atk_8266_send_cmd("AT+CIPMODE=0","OK",200);  //1رÕí¸′«Ä£ê½        
                Show_Str(40,55,200,16,"Î′¼ì2aμ½Ä£¿é!!!",16,0);
                delay_ms(800);
                LCD_Fill(40,55,200,55+16,WHITE);
                Show_Str(40,55,200,16,"3¢êÔᬽóÄ£¿é...",16,0);
        }
        while(atk_8266_send_cmd("ATE0","OK",20));//1رջØÏÔ
        atk_8266_send_cmd("AT+CWMODE=1","OK",50);                //éèÖÃWIFI STAÄ£ê½
        atk_8266_send_cmd("AT+RST","OK",20);                //DHCP·tÎñÆ÷1رÕ(½öAPÄ£ê½óDD§)
        delay_ms(1000);         //Ñóê±3Sμè′yÖØÆô3é1|
        delay_ms(1000);
        delay_ms(1000);
        delay_ms(1000);
        //éèÖÃᬽóμ½μÄWIFIíøÂçÃû3Æ/¼óÃü·½ê½/ÃüÂë,Õa¼¸¸ö2ÎêyDèòa¸ù¾YÄú×Ô¼oμÄ·óéÆ÷éèÖýøDDDT¸Ä!!
        atk_8266_send_cmd("AT+CIPMUX=0","OK",20);   //0£oμ¥ᬽó£¬1£o¶àᬽó
        sprintf((char*)p,"AT+CWJAP=\"%s\",\"%s\"",wifista_ssid,wifista_password);//éèÖÃÎTÏß2Îêy:ssid,ÃüÂë
        while(atk_8266_send_cmd(p,"WIFI GOT IP",300));                                        //ᬽóÄ¿±ê·óéÆ÷,2¢Çò»ñμÃIP





然后连接天气服务器,get API


01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

sprintf((char*)p,"AT+CIPSTART=\"TCP\",\"%s\",%s",WEATHER_SERVERIP,WEATHER_PORTNUM);    //ÅäÖÃÄ¿±êTCP·tÎñÆ÷
        res = atk_8266_send_cmd(p,"OK",200);//ᬽóμ½Ä¿±êTCP·tÎñÆ÷
        if(res==1)
        {
                myfree(SRAMIN,p);
                return 1;
        }
        delay_ms(300);
        atk_8266_send_cmd("AT+CIPMODE=1","OK",100);      //′«êäÄ£ê½Îa£oí¸′«        
        atk_8266_get_wanip(ipbuf);//»ñè¡WAN IP
        sprintf((char*)p,"IPμØÖ·:%s ¶Ë¿ú:%s",ipbuf,(u8*)WEATHER_PORTNUM);
//        Show_Str(30,65,200,12,p,12,0);                                //ÏÔê¾IPμØÖ·oí¶Ë¿ú        
        USART3_RX_STA=0;
        atk_8266_send_cmd("AT+CIPSEND","OK",100);         //¿aê¼í¸′«
        printf("start trans...\r\n");

        u3_printf("GET [color=rgb(0, 130, 0) !important][url=https://api.seniverse.com/]https://api.seniverse.com[/url]);







然后再解析这个API返回的数据,并予以显示。

二、
1.目前免费的API有很多,我比较喜欢“心知天气”( https://www.seniverse.com/ )和 “和风天气”( http://www.heweather.com/  )。
  大家可以到这两个网站去注册,选择你们喜欢的天气API。心知天气的免费API返回的数据表少,功能较少。而和风天气的免费API则返回的比较详细。
  我这里选择心知天气,然后大家可以去看看心知天气的文档,里面有详细的数据结构(cjson数据)。
2.移植和解析cjson。
  这个东西很简单,我也是第一次移植,不过看了一篇教程就会了。推荐大家看下这两篇文章就可以了。
  http://blog.csdn.net/xukai871105/article/details/32346797    这个讲cjson的格式讲的蛮好的
  http://blog.csdn.net/lintax/article/details/50993958     这个讲cjson的使用
  https://sourceforge.net/projects/cjson/          这个网站是下载cjson的

  移植cjson,注意两点,一个是cjson占用堆比较大,大约3K,这个坑我就遇到了,使用默认的堆大小不能运行,于是我把堆改成了4K。




  第二点就是 要为 cjson 配置malloc ,打开cjson.c,修改下面几处。修改成原子的mymalloc,由于原子的mymalloc有个选择SRAMIN的参数,所以我又封装了下,弄了个my_malloc。
  



3.连接天气服务器,然后get 天气的api。
   这里卡了好半天,一开始用网口调试助手连上了服务器,然后get那个API链接的时候,一直不成功,原来是要在这个链接后面加两个回车,这个得感谢坛友  svwydh


4.解析天气数据
  用cjson库来解析天气数据,这里有个问题就是获得的天气数据的格式都是  utf8 的,无法直接显示在屏上,需要转码成GBK的,而原子哥的汉字例程就是gbk的。
  utf8转gbk这个网上也比较少,问了很多网友,有人说用查表法,于是又去找,侥幸找到了一个类似的,然后修改了下,居然可以用。


5.图标的制作
  首先自己去选一套漂亮的天气图标,我刚才推荐的那两个网站里已经为大家准备了图标,可自行下载。
  然后用战舰光盘里那个Image2lcd的软件,选择输出灰度为单色,这样取模以后的数据最小。打开你的天气图标,然后点保存,就可以保存为一个数组的c文件,将这个
  数组添加到你的工程里去。


大体上的难点和知识点就是上面这些。

上几张效果图。一张彩色的,一张白色的,大家觉得哪个好看点。


接下来传个演示视频由于视频不能播放,先放个链接:http://v.youku.com/v_show/id_XMz ... qq-pf-to=pcqq.group


如果大家感兴趣,将会上传源码。
@svwydh 感谢


以下是源码,喜欢的可自行下载。 ESP8266获取网络天气适配战舰V3.zip


G3机智云物联网云服务 287087942
有什么疑问,可以在论坛,qq群(优先在论坛哦,避免重复造轮子)
在论坛提问的回答率是100%!!!!!!!!
希望和大家一起交流学习.

1

主题

11

帖子

118

积分

注册会员

Rank: 2

积分
118
发表于 2017-11-28 09:28:13 | 显示全部楼层
来顶顶我自己的帖子,没想到版主搬运到这里来了

点评

已转载自“机智云开发者”公众号。写的是你在正点原子网站的用户名。 感谢分享。  详情 回复 发表于 2017-11-28 15:54
发表于 2017-11-28 09:40:27 | 显示全部楼层
不知道GBK转UTF-8代码如何实现。我用的是官方的SDK写的 获取天气信息。就差转换了
发表于 2017-11-28 15:54:49 | 显示全部楼层
墨影染林 发表于 2017-11-28 09:28
来顶顶我自己的帖子,没想到版主搬运到这里来了

已转载自“机智云开发者”公众号。写的是你在正点原子网站的用户名。
感谢分享。
1、机智云QQ群: 287087942
机智云爱好者-APP开发群: 599735135
QQ群目前非常活跃,欢迎大家参与进来,交流,讨论,答疑,解惑~~
2、机智云微信公众号: 机智云 gizwits /   机智云智能宠物屋go-iot
关注机智云Gizwits官方公众号随时掌握最新资讯和活动信息

6

主题

11

帖子

182

积分

注册会员

Rank: 2

积分
182
发表于 2017-11-29 11:16:19 | 显示全部楼层
ESP8266模块首单6.8元
问题是烧录机智云固件后还能设置透传连接目标服务器吗

1

主题

17

帖子

328

积分

中级会员

Rank: 3Rank: 3

积分
328
发表于 2017-11-29 18:45:49 | 显示全部楼层
不错   弄的挺好的    我本来想把程序移植到stm8s上的   无奈8k的flash不够用   

8

主题

43

帖子

892

积分

高级会员

Rank: 4

积分
892
发表于 2017-12-1 08:56:43 | 显示全部楼层
这个是用esp8266 AT固件做的吧,没经过机智云的。

0

主题

1

帖子

24

积分

新手上路

Rank: 1

积分
24
发表于 2017-12-2 16:56:06 | 显示全部楼层
这个好,不错的学习资料
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入Q群 返回顶部

© 2011-2017 Gizwits ( 粤ICP备11090211号 )

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