Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
柿饼_PersimmonUI
【PersimmonUI学习营】+ DaZhou + ’央式‘天气预报/串口交互
发布于 2018-10-08 11:25:46 浏览:2246
订阅该版
这次作业要求从天气API获得未来几天的天气,并以图表分析的形式展现出来。还要求串口输入日期,设备返回当天的天气情况。我感觉不管是UI绘制,还是JS代码编写,这次都很综合,有一定的难度。下面,就让敝人拙计小秀,带领大家看看怎么去实现上述功能。还是先附上这次的工程代码和视频效果。 [GitHub工程代码、视频仓](https://github.com/2SCZhou/PersimUI_learn) 第一部分:效果 还是先上几张效果图,有图好说话。 ![1.jpg](/uploads/201810/08/102521qzc555xlm332q2ve.jpg) 这是主界面,长这么大,我还没有吃过这么好看的柿饼呢,但是RT-Thread的柿饼UI各位真的要尝尝,这是咱们家乡的特色UI,悠悠一口,思君不忘。 ![1538965978(1).png](/uploads/201810/08/103346ucx8jzolk7oglb7m.png) 这是二界面,朴实无华,看见还想笑,lowb. 哎,美工不懂程序员的心,您知道这个page程序员用了多少技术吗?后面慢慢道来! ![3.png](/uploads/201810/08/103712hde09d9d76djqelo.png) 惊不惊喜?意不意外?你们根本不懂我那闷骚奔腾的心。这就是作业要求实现的第一个效果。 ![4.jpg](/uploads/201810/08/103949kk875dssak7dusdd.jpg) 这图不多说了,串口输入今明后三天任意一天日期,设备返回当天的气温情况。这个工具不支持中文,当天的天气情况我就省略了。 第二部分:原理实现 先讲串口交互实现,由于此次固件串口接收数据,会把原数据截取为两部分,第一部分通常为3-5个字符。所以,需要一种机制,把串口调试助手发来的数据拼接在一起。我用的办法自我感觉挺实用,但是有点土。代码如下: app.js代码: ```var app = { page : "page1/page1", serialData: '', i : 2, onLaunch: function (event) //app加载回调函数 { console.log('app onLaunch'); uart = pm.openSerialPort({device: "uart5"}); //打开串口设备uart5 if (uart) { console.log('pm.openSerialPort OK'); uart.write(Buffer("Please enter the date(e.g. 2018-01-01)
", 'ascii')); //串口发送数据,一个ascii字符串数据BUFF uart.onData(this.onUart, this); //设置串口接收函数为 onUart } }, getWeatherInfo: function(serialData) { var thiz = this; var rq1 = pm.request({ url: 'http://api.seniverse.com/v3/weather/daily.json?key=hfvxxp7oq0w4dmso&location=shanghai&language=zh-Hans&unit=c&start=0&days=5', //开发者服务器接口地址 method : 'GET', //请求方式 header:{ //设置请求的header "Content-Type":"application/json" }, success: function(res) { //与开发者服务器连接成功后,执行的回调函数 var str = 0; console.log('request success'); str = res.data.toString('utf8'); json_obj = JSON.parse(str); switch(serialData){ case json_obj.results[0].daily[0].date: var buf = json_obj.results[0].daily[0].date + '
' + 'Max temperature:' + json_obj.results[0].daily[0].high + '
' + 'Min temperature:' + json_obj.results[0].daily[0].low + '
'; uart.write(Buffer(buf, 'ascii')); break; case json_obj.results[0].daily[1].date: var buf = json_obj.results[0].daily[1].date + '
' + 'Max temperature:' + json_obj.results[0].daily[1].high + '
' + 'Min temperature:' + json_obj.results[0].daily[1].low + '
'; uart.write(Buffer(buf, 'ascii')); break; case json_obj.results[0].daily[2].date: var buf = json_obj.results[0].daily[2].date + '
' + 'Max temperature:' + json_obj.results[0].daily[2].high + '
' + 'Min temperature:' + json_obj.results[0].daily[2].low + '
'; uart.write(Buffer(buf, 'ascii')); break; default: console.log('Date Error!'); uart.write(Buffer('Please enter the date from today to the day after tomorrow.
', 'ascii')); break; } }, complete: function(){ //当http request操作完成后,执行的回调函数,无论连接成功还是失败都会执行 console.log('request complete') }, fail: function(){ //与开发者服务器连接失败后,执行的回调函数 console.log('request failed') } }); }, onUart: function(data) { this.serialData += data.toString('ascii'); this.i--; if(this.i == 0) { console.log(this.serialData); this.getWeatherInfo(this.serialData); this.i = 2; this.serialData = ''; } } }; App(app);``` 这部分代码是实现串口交互的关键代码,我用全局变量接收两次数据,拼接到一起。 然后是实时时间和天气预报的实现。这两个功能都有相应的API调用,通过HTTP 的GET方法获取服务器返回的JSON数据,然后再对这些数据处理就可以了。上述代码中有这部分的实现,这里我就不再贴代码了,具体可以在github上面查看。另外一点,套用ABC大佬的一句话:“贫穷限制了我的想象力”,很多API都是收费了,价格不菲,比如我界面上的“历史上的今天”和“老黄历”我都只能按404处理了。换句话说,您手上的可用API资源越多,您做的功能越丰富。包括我用的实时时间的API,都是由次数限制了。为了拍视频,苦等1小时,都是没钱的病,得治! 界面二,用了自定义面板的技术,在之前的仿MacOS里面有详细的介绍,不同的是,这次里面嵌套的是button,可以按下触发页面跳转。个人感觉自定义面板是非常有用的组件,用好了真的能用出来花。 界面三,有著名央视主持人帮我们播报天气,这里其实是一张背景图片,真正能动起来的是panel里面的label和canvas,在这里面实现数据的动态显示和处理。 第三部分:总结 中肯的讲,目前柿饼UI工具还有很多bug,易用性有待提高。但是,这并不影响柿饼的强大,我这三脚猫的功夫,能做出来让我自己都很陶醉的作品,一方面有灵魂,另一方面得有柿饼的加持。相信在不久的将来,柿饼UI会成为大家做相关项目的首选。也非常荣幸,我能成为十三亿人民中,首先吃柿饼的那一小撮人。感谢RT-Thread!感谢帮助我进步的人! DaZhou
查看更多
4
个回答
默认排序
按发布时间排序
armink
2018-10-08
这家伙很懒,什么也没写!
你这个天气预报很逼真;P
DaZhou
2018-10-08
这家伙很懒,什么也没写!
>你这个天气预报很逼真 --- 哈哈,这就是我为啥起名叫‘央式’的原因
bernard
2018-10-10
这家伙很懒,什么也没写!
都有出最终的作业了,后面考虑发布i.MXRT1052上的柿饼固件,以及配套的工具。
DaZhou
2018-10-10
这家伙很懒,什么也没写!
>都有出最终的作业了,后面考虑发布i.MXRT1052上的柿饼固件,以及配套的工具。 ... --- 大快人心的消息啊
撰写答案
登录
注册新账号
关注者
0
被浏览
2.2k
关于作者
DaZhou
这家伙很懒,什么也没写!
提问
10
回答
49
被采纳
0
关注TA
发私信
相关问题
1
【PersimmonUI柿饼学习营】+ A Byte of China + 环境搭建&20W年薪广告
2
【柿饼学习营】+werrysuzhen+20W年薪作业
3
【PersimmonUI柿饼学习营】+ meetwit + 20W年薪广告&lesson01
4
【PersimmonUI柿饼学习营】+ DaZhou + 20W年薪作业+视频有彩蛋
5
【PersimmonUI柿饼学习营】+ DMY+ lesson01 20W年薪广告
6
【PersimmonUI柿饼学习营】+ Bigmagic+20W年薪广告&day01
7
【PersimmonUI柿饼学习营】+ chowguohua+年薪广告
8
【柿饼学习营】+werrysuzhen+脚本及事件学习
9
【PersimmonUI柿饼学习营】+ DaZhou+ 手把手教你做计算器
10
【PersimmonUI柿饼学习营】+ A Byte of China + 2048游戏
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
在用clangd开发RTT吗,快来试试如何简单获得清晰干净的工作区
2
GD32F450 片内 flash驱动适配
3
STM32H7R7运行CherryUSB
4
RT-Smart首次线下培训,锁定2024 RT-Thread开发者大会!
5
使用RC522软件包驱动FM1722
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
freemodbus
PWM
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
中断
编译报错
Debug
SFUD
rt_mq_消息队列_msg_queue
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
a1012112796
10
个答案
1
次被采纳
踩姑娘的小蘑菇
4
个答案
1
次被采纳
红枫
4
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
Ryan_CW
4
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
6
次点赞
YZRD
2
篇文章
5
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
Woshizhapuren
1
篇文章
5
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部