版主: wanchong , wangyu , eepwwp , firedom |
CES8020
最后登陆时间:2014-07-13 20:39:28 |
先说需要用到的配件: 伽利略开发板一块
1602液晶一块,楼主在这里用的是4个接口的串行液晶,并行液晶也可以,不过接线方式和程序会略有不同
公对母杜邦线若干
网线一根
SD卡和读卡器,当然SD卡里要有一个yocto的镜像
microUSB线
串口线,这一个不一定要有,因为putty也提供了ssh,你可以通过网线和路由器对开发板里的linux进行操作
没有串口线的童鞋看这里: 首先不管用什么方法,找到Galileo开发板的IP地址,当然板子一定要先用网线连接到路由器,楼主是在路由器的配置页面里找到的:
这里可以看到Galileo板子在我的路由器的内部IP地址是192.168.1.147 然后我们打开putty,选择ssh,端口号不改,把IP地址填进去:
点击open,稍等一下,就可以看到熟悉的登录界面了,输入用户名root就可以进入板子里的linux了
什么?不会操作linux?那就和楼主没关系了
言归正传,楼主关于这个天气显示器的思路是这样的: 通过sketch调用开发板里写好的的python脚本→脚本从服务器上下载天气,存储到文本文件里→sketch调用SD等模块读取文件,输出到液晶屏或串口
楼主找了很多的服务器,曾经尝试过用中国天气网的api,奈何返回的天气信息是中文的,处理起来很麻烦,所以楼主选择了雅虎的服务器,这是他们的api介绍:https://developer.yahoo.com/weather/ 接下来就是写脚本了,楼主花了一天的时间恶补python,但是就一直卡在了xml解析这块。所以一怒之下用了老外写好的脚本,这是他们的主页:https://yweather.readthedocs.org/en/v0.1/ 脚本的下载地址:https://pypi.python.org/pypi/yweather/0.1 感谢Thomas Roten!
关于这个脚本的安装,楼主还是简单说一下吧,毕竟是傻瓜式教程嘛 首先把下载下来的文件用读卡器存进SD卡,这一步很简单就不截图了 第二步,把卡插进开发板,通电,然后启动putty,同样不再细说 接下来,敲入以下命令,把工作目录切换到/media/realroot: cd /media/realroot 接着解压:
tar -zxvf yweather-0.1.tar.gz
cd ./yweather-0.1 然后安装: python setup.py build python setup.py install 下面就可以写脚本啦,有人可能要问,脚本不是下载好了吗?其实我们下载下来的只是一些库,我们还要写一些脚本来调用这些库 在写脚本之前,我们还要把自己的城市代码记住,先进入雅虎天气的主页搜索你的城市,楼主以北京为例:
咳咳,广告什么的就不管他了
注意把这串代码复制下来,一会儿写脚本要用:
现在是真的开始写脚本了,楼主写好的脚本在附件里,懒得复制的童鞋就自己下载,这里楼主也把源码贴上来:
#weather.py import string import yweather import sys import os import shutil client=yweather.Client() ZT_WEA=client.fetch_weather("2160703",metric=True) #请把2160703换成你的城市代码 WD=string.atoi(ZT_WEA['wind']['direction']) fp=open("weather.txt",'w') fp.write("%s," %(ZT_WEA(['location']['city'])) fp.write('%s' %(ZT_WEA['condition']['text'])) fp.close() fp=open("weather1.txt",'w') fp.write('%s' %(ZT_WEA['forecast'][0]['low'])) fp.close() fp=open("weather2.txt",'w') fp.write('%s' %(ZT_WEA['forecast'][0]['high'])) fp.close() fp=open("weather3.txt",'w') fp.write("Wind ") if WD == 0: fp.write("N") elif 0 < WD < 90: fp.write("NE") elif 90 < WD < 180: fp.write("SE") elif WD == 90: fp.write("E") elif WD == 180: fp.write("S") elif 180 < WD < 270: fp.write("SW") elif WD == 270: fp.write("W") elif 270 < WD < 360: fp.write("NW") else: fp.write(WD) fp.write(",%s km/h" %(ZT_WEA['wind']['speed'])) fp.close();
不管你下载也好,复制也好,这个名为weather.py的文件应该放在/media/realroot下,也就是在Windows里直接复制到SD卡根目录 记得一定要改城市代码!否则你的天气数据就是楼主老家的了 这里说明一下,这个脚本会在根目录下创建四个文本文件来存储天气数据,这不会对系统产生任何影响 下面就是写我们的sketch了,打开你的IDE,在IDE里输入如下代码:
#include <SD.h> #include <Wire.h> #include <LiquidCrystal_I2C.h> using namespace std; #define CS 4 LiquidCrystal_I2C lcd(0x27,16,2); void setup() { Serial.begin(9600); pinMode(13,OUTPUT); lcd.init(); lcd.backlight(); lcd.setBacklight(1); if(!SD.begin(CS)) { digitalWrite(13,HIGH); while(1); } } void loop() { File file,file1,file2,file3; lcd.home(); lcd.print("Loading..."); system("python /media/realroot/weather.py"); file=SD.open("weather.txt"); file1=SD.open("weather1.txt"); file2=SD.open("weather2.txt"); file3=SD.open("weather3.txt"); int size=max(file.size(),file3.size()+file1.size()+file2.size()+5); lcd.clear(); if(file) { while(file.available()) { lcd.write(file.read()); } file.close(); } lcd.setCursor(0,1); if(file1) { while(file1.available()) { lcd.write(file1.read()); } file1.close(); } lcd.write(B11011111); lcd.print("C-"); if(file2) { while(file2.available()) { lcd.write(file2.read()); } file2.close(); } lcd.write(B11011111); lcd.print("C "); if(file3) { while(file3.available()) { lcd.write(file3.read()); } file3.close(); } if(size>16) { while(1) { int x; delay(5000); for(x=16;x<=size;x++) { lcd.scrollDisplayLeft(); delay(1000); } lcd.home(); } } }
楼主也懒得写注释了,大家看吧,看不懂我再写
下面连好LCD,VCC接5V,Gnd接Gnd,SDA接SDA,SCL接SCL,把程序烧进板子,应该就能工作了 上两张效果图
附weather.py:weather.zip 解压后直接放到SD卡根目录下 关键词:教程 天气 脚本 |
此帖由CES8020于2014-07-25 14:51:42最后编辑
|
|
interrgned
最后登陆时间:2014-07-24 13:36:38 |
QQ空间不能外链图……噗
|
CES8020
最后登陆时间:2014-07-13 20:39:28 |
interrgned的原帖 QQ空间不能外链图……噗 抱歉抱歉,已经重新上传了 |
未来创意
最后登陆时间:2014-07-25 15:31:36 |
人气不多哦 为何要用读卡器,不是有sd槽吗
|
CES8020
最后登陆时间:2014-07-13 20:39:28 |
没有读卡器怎么把脚本复制到板子里执行 |
zzmNO1
最后登陆时间:2014-07-10 16:44:33 |
我的板子网线连接到路由器,我在路由器的配置页面里没有找到找到Galileo开发板的IP地址(板子已接通电源,RJ45的两个灯一直亮着),楼主是否除了用网线连接板子到路由器外是否还有其他操作?
|
此帖由zzmNO1于2014-08-13 09:06:57最后编辑
|
|
machinnneee
最后登陆时间:2014-07-02 12:32:54 |
不错哦,受教了
|
qomoliao
最后登陆时间:2014-07-08 13:18:17 |
|
CES8020
最后登陆时间:2014-07-13 20:39:28 |
zzmNO1的原帖 我的板子网线连接到路由器,我在路由器的配置页面里没有找到找到Galileo开发板的IP地址(板子已接通电源,RJ45的两个灯一直亮着),楼主是否除了用网线连接板子到路由器外是否还有其他操作? 没有啊,要不你试试用ifconfig和iwconfig命令配置一下试试? |
谦谦公子
最后登陆时间:2014-08-16 16:12:15 |
营养帖,赞!
|