版主: wanchong , wangyu , eepwwp , firedom

分享到:
共11条 1/2 1 2 »   

【傻瓜式教程】教你从零开始搭建一个基于Galileo开发板的天气显示器

    [您是本帖的第3276位阅读者]
CES8020
我是GG
高级会员

最后登陆时间:2014-07-13 20:39:28

直达楼层
1# 发表于 2014-07-25 11:56:45

先说需要用到的配件:

伽利略开发板一块

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最后编辑

RE: 【傻瓜式教程】教你从零开始搭建一个基于Galileo开发板的天气显示器

interrgned
我是GG
高级会员

最后登陆时间:2014-07-24 13:36:38

2# 发表于 2014-07-25 13:23:58
QQ空间不能外链图……噗

RE: 【傻瓜式教程】教你从零开始搭建一个基于Galileo开发板的天气显示器

CES8020
我是GG
高级会员

最后登陆时间:2014-07-13 20:39:28

3# 发表于 2014-07-25 14:36:24
interrgned的原帖
QQ空间不能外链图……噗

抱歉抱歉,已经重新上传了

RE: 【傻瓜式教程】教你从零开始搭建一个基于Galileo开发板的天气显示器

未来创意
我是GG
高级会员

最后登陆时间:2014-07-25 15:31:36

4# 发表于 2014-07-25 15:34:42

人气不多哦

为何要用读卡器,不是有sd槽吗


RE: 【傻瓜式教程】教你从零开始搭建一个基于Galileo开发板的天气显示器

CES8020
我是GG
高级会员

最后登陆时间:2014-07-13 20:39:28

5# 发表于 2014-07-25 15:43:49
未来创意的原帖

人气不多哦

为何要用读卡器,不是有sd槽吗



没有读卡器怎么把脚本复制到板子里执行

RE: 【傻瓜式教程】教你从零开始搭建一个基于Galileo开发板的天气显示器

zzmNO1
我是GG
高级会员

最后登陆时间:2014-07-10 16:44:33

6# 发表于 2014-08-13 09:03:31
我的板子网线连接到路由器,我在路由器的配置页面里没有找到找到Galileo开发板的IP地址(板子已接通电源,RJ45的两个灯一直亮着),楼主是否除了用网线连接板子到路由器外是否还有其他操作?
此帖由zzmNO1于2014-08-13 09:06:57最后编辑

RE: 【傻瓜式教程】教你从零开始搭建一个基于Galileo开发板的天气显示器

machinnneee
我是GG
高级会员

最后登陆时间:2014-07-02 12:32:54

7# 发表于 2014-08-18 22:46:19
不错哦,受教了

RE: 【傻瓜式教程】教你从零开始搭建一个基于Galileo开发板的天气显示器

qomoliao
我是GG
高级会员

最后登陆时间:2014-07-08 13:18:17

8# 发表于 2014-08-24 23:31:24
未来创意的原帖

人气不多哦

为何要用读卡器,不是有sd槽吗


CES8020的原帖
没有读卡器怎么把脚本复制到板子里执行

scp不可以?

RE: 【傻瓜式教程】教你从零开始搭建一个基于Galileo开发板的天气显示器

CES8020
我是GG
高级会员

最后登陆时间:2014-07-13 20:39:28

9# 发表于 2014-08-30 20:58:22
zzmNO1的原帖
我的板子网线连接到路由器,我在路由器的配置页面里没有找到找到Galileo开发板的IP地址(板子已接通电源,RJ45的两个灯一直亮着),楼主是否除了用网线连接板子到路由器外是否还有其他操作?

没有啊,要不你试试用ifconfig和iwconfig命令配置一下试试?

RE: 【傻瓜式教程】教你从零开始搭建一个基于Galileo开发板的天气显示器

谦谦公子
我是GG
高级会员

最后登陆时间:2014-08-16 16:12:15

10# 发表于 2014-09-02 16:33:26
营养帖,赞!
共11条 1/2 1 2 »   
快速回复主题
  • 匿名不能发帖!请先 [ 登陆 注册 ]