2017年5月23日星期二

Arduino Tian开发板:一个功能强大的天气预报中心



每天都在出现新的连接设备。 Arduino携手云平台一起加入这场战斗,于是出现了一个新的挑战者 - Arduino Tian

使用python和经典Arduino框架,本教程将引导您将您的Arduino Tian开发板变成一个天气预报中心。 但由于Lucky扩展板有那么多传感器,所以涉及到的内容可能会更多些!

第一部分:所需的设备



第二部分:配置Tian开发板
Tian开发板入门非常简单。

如果您尚未下载Arduino IDE(或者您的IDE版本低于1.7.10),您可以在这里下载最新版本:http://www.arduino.org/downloads

本文的大部分内容将在Arduino操作系统中完成,但目前唯一可以与Lucky扩展板进行交互的有效方式是通过IDE实现。

我发现通过操作系统设置Tian的Arduino操作说明很容易。你可以在这里阅读:http://www.arduino.org/learning/ ... d-with-arduino-tian

以下是一个简短的步骤总结:
     1.  打开电源。您可以将其连接到您的计算机,或者其他设备;
     2.  等待大约20秒;
     3.  在您的计算机上,查找您的WiFi网络下的Arduino开发板。应该是类似于“Arduino-Tian - ******”
     4.  连接到该开发板网络,然后在浏览器中导航到http://arduino.local
     5.  应该会显示一个要 求输入密码的页面- 密码是“arduino”;
     6.  按照向导设置Tian的WiFi连接;
     7.  一旦配置完成,连接到您给Tian设置的同一个WiFi,然后再次访问http://arduino.local

您的Arduino操作系统现在应该可以使用了!

■    使用Web IDE

我们在Arduino Web IDE中使用的主要工具是Terminal,可以在主菜单中的Utilities下找到。

所有我们需要做的是安装一些工具,然后我们可以随时从Weather Underground网站传输数据!

第三部分:Wunderground

Weather Underground(http://www.wunderground.com)提供实时在线的天气信息,由遍布在全球范围内的14万多个个人气象站组成的网络提供。 很有可能的是,在你的附近就有一个Weather Underground个人气象站。 Wunderground的很酷的一个方面是,他们提供一个API,我们可以用来检索世界上任何地方的天气数据(几乎)。

温度、露水、风尘、湿度、降水、压力、紫外线指数、...随时随地都可以轻松的使用。 我们来学习如何使用Wunderground的超简单API。

■    如何使用Wunderground API

为了能够使用Wunderground API,首先我们需要自己的API密钥。获取API密钥可以很快实现,并且免费。
●    点击“Sign Up for FREE”!
       
●    创建一个帐户,然后单击确认电子邮件中发送给您的链接来激活您的帐户;
●    登陆
●    转到Pricing并选择免费的Stratus Plan(默认选择)。您每天进行500个API调用,费用是$ 0。获取Developer级别的API不需要信用卡。
       
●    点击“Purchase Key”
●    填写表单并提交以获取您的API密钥

您的密钥看起来像这样:0def10027afaebb7。保存。

您可以通过按照下列格式在您的浏览器中输入URL,从而形成一个到Wunderground的API:
  1. http://api.wunderground.com/api/YOUR_API_KEY/conditions/q/THE_DESIRED_STATE/THE_DESIRED_CITY.json
复制代码

例如,要获得加利福尼亚旧金山的天气:
或者是伦敦的天气
或者是多伦多的天气

我们来看看返回的内容:
  1. {
  2.   "response": {
  3.   "version":"0.1",
  4.   "termsofService":"http://www.wunderground.com/weather/api/d/terms.html",
  5.   "features": {
  6.   "conditions": 1
  7.   }
  8.         }
  9.   ,        "current_observation": {
  10.                 "image": {
  11.                 "url":"http://icons.wxug.com/graphics/wu2/logo_130x80.png",
  12.                 "title":"Weather Underground",
  13.                 "link":"http://www.wunderground.com"
  14.                 },
  15.                 "display_location": {
  16.                 "full":"London, United Kingdom",
  17.                 "city":"London",
  18.                 "state":"",
  19.                 "state_name":"United Kingdom",
  20.                 "country":"UK",
  21.                 "country_iso3166":"GB",
  22.                 "zip":"00000",
  23.                 "magic":"1",
  24.                 "wmo":"03772",
  25.                 "latitude":"51.47999954",
  26.                 "longitude":"-0.44999999",
  27.                 "elevation":"24.00000000"
  28.                 },
  29.                 "observation_location": {
  30.                 "full":"London, ",
  31.                 "city":"London",
  32.                 "state":"",
  33.                 "country":"UK",
  34.                 "country_iso3166":"GB",
  35.                 "latitude":"51.47750092",
  36.                 "longitude":"-0.46138901",
  37.                 "elevation":"79 ft"
  38.                 },
  39.                 "estimated": {
  40.                 },
  41.                 "station_id":"EGLL",
  42.                 "observation_time":"Last Updated on October 23, 5:50 AM BST",
  43.                 "observation_time_rfc822":"Fri, 23 Oct 2015 05:50:00 +0100",
  44.                 "observation_epoch":"1445575800",
  45.                 "local_time_rfc822":"Fri, 23 Oct 2015 06:13:53 +0100",
  46.                 "local_epoch":"1445577233",
  47.                 "local_tz_short":"BST",
  48.                 "local_tz_long":"Europe/London",
  49.                 "local_tz_offset":"+0100",
  50.                 "weather":"Overcast",
  51.                 "temperature_string":"50 F (10 C)",
  52.                 "temp_f":50,
  53.                 "temp_c":10,
  54.                 "relative_humidity":"87%",
  55.                 "wind_string":"From the Variable at 4 MPH",
  56.                 "wind_dir":"Variable",
  57.                 "wind_degrees":0,
  58.                 "wind_mph":4,
  59.                 "wind_gust_mph":0,
  60.                 "wind_kph":6,
  61.                 "wind_gust_kph":0,
  62.                 "pressure_mb":"1022",
  63.                 "pressure_in":"30.18",
  64.                 "pressure_trend":"0",
  65.                 "dewpoint_string":"46 F (8 C)",
  66.                 "dewpoint_f":46,
  67.                 "dewpoint_c":8,
  68.                 "heat_index_string":"NA",
  69.                 "heat_index_f":"NA",
  70.                 "heat_index_c":"NA",
  71.                 "windchill_string":"NA",
  72.                 "windchill_f":"NA",
  73.                 "windchill_c":"NA",
  74.                 "feelslike_string":"50 F (10 C)",
  75.                 "feelslike_f":"50",
  76.                 "feelslike_c":"10",
  77.                 "visibility_mi":"6.2",
  78.                 "visibility_km":"10.0",
  79.                 "solarradiation":"--",
  80.                 "UV":"0","precip_1hr_string":"-9999.00 in (-9999.00 mm)",
  81.                 "precip_1hr_in":"-9999.00",
  82.                 "precip_1hr_metric":"--",
  83.                 "precip_today_string":"0.00 in (0.0 mm)",
  84.                 "precip_today_in":"0.00",
  85.                 "precip_today_metric":"0.0",
  86.                 "icon":"cloudy",
  87.                 "icon_url":"http://icons.wxug.com/i/c/k/nt_cloudy.gif",
  88.                 "forecast_url":"http://www.wunderground.com/global/stations/03772.html",
  89.                 "history_url":"http://www.wunderground.com/history/airport/EGLL/2015/10/23/DailyHistory.html",
  90.                 "ob_url":"http://www.wunderground.com/cgi-bin/findweather/getForecast?query=51.47750092,-0.46138901",
  91.                 "nowcast":""
  92.         }
  93. }
复制代码

看看所有这些美好的天气数据。我们只需要编写脚本进行解析,然后将其发送到基于Web的仪表板上。首先,我们一起设置数据的目的地 - >Initial State。

■    Initial State
我们希望将我们所有的天气数据都传输到云服务,并使用这些服务将我们转到一个可以从笔记本电脑或移动设备访问的漂亮仪表板。我们的数据需要一个目的地。
这里我们要使用Initial State

步骤1:注册Initial State帐户
转到https://app.initialstate.com/#/register/,并创建一个新帐户。

步骤2:安装ISStreamer
将Initial State Python模块安装到您的Tian开发板中。为了安装模块,我们需要先安装软件包管理器pip
在Arduino Web IDE的终端,运行以下命令:
  1. opkg install python-openssl
  2. opkg install distribute
  3. easy_install pip
  4. pip install ISStreamer
复制代码

注意:如果安装发行版时遇到问题,可能需要更改您的opkg软件包列表端点。可以查看这个帖子如何做的:https://github.com/aws/aws-iot-device-sdk-arduino-yun/issues/26

步骤3:访问密钥
由于Access Key参数,与您的Initial State帐户相关联。在网络浏览器中进入您的Initial State帐户,请点击右上角的用户名,然后转到“my count”,您将在“Streaming Access Key”页面底部找到您的访问密钥。它是一长串的字母和数字。
每次创建数据流时,该访问密钥将将该数据流引导到您的帐户(所以不要与任何人共享您的密钥)。

步骤4:运行示例
创建一个名为stream.py的Python脚本(可以使用vi、nano或CodeMirror),其中包含以下内容:
  1. import time                                                                    
  2. from ISStreamer.Streamer import Streamer                                       
  3.                                                                                
  4. streamer = Streamer(bucket_name="Stream Example Tian", bucket_key="arduinotian", access_key="Your_Access_Key")
  5.                                                                                
  6. streamer.log("My Messages", "Stream Starting")                                 
  7. while True:                                                                    
  8.     streamer.log("My Messages","on")                                           
  9.     time.sleep(5)                                                              
  10.     streamer.log("My Messages","off")                                          
  11.     time.sleep(5)
复制代码

请确保将您的Initial State访问密钥添加到第4行
保存并运行测试脚本,确保我们可以创建一个数据流到您的Initial State帐户。运行以下命令:
  1. $ python stream.py
复制代码

步骤5:成果
在浏览器中返回到您的Initial State帐户。一个名为“Stream Example Tian”的数据存储篮应该显示在日志的左侧(您可能需要刷新页面)。单击数据存储篮,然后单击Waves图标查看测试数据。
您可能需要通过Waves教程来熟悉如何使用此数据可视化工具。接下来,查看Tiles中的数据,以仪表板的形式查看相同的数据。
您现在可以开始从Wunderground获得实时数据流。

■    Wunderground仪表板

现在是最有趣的部分。我们准备开始使用Wunderground API来创建天气仪表板,并捕获我们选择的天气历史记录。为此,我们将使用Python脚本:https://github.com/initialstate/ ... TianWunderground.py。该脚本只需使用您的API密钥调用Wunderground API,并在指定的时间间隔内检索天气信息。它还会将该数据传输到您的Initial State帐户,这将允许您创建Wunderground仪表板。

您也可以将此脚本复制到您的Tian开发板(我建议使用CodeMirror),或通过Github存储库来访问。您可以通过在终端中输入以下内容来执行此操作:
  1. opkg install unzip
  2. curl -l -k https://codeload.github.com/initialstate/arduino-tian-weather-hub/zip/master > archive.zip
  3. unzip archive.zip -d .
  4. mv arduino-tian-weather-hub-master arduino-tian-weather-hub
  5. rm -f archive.zip
  6. cd arduino-tian-weather-hub
复制代码

从这里,您将可以访问我们运行的python文件来创建我们的天气仪表盘。

在运行之前,您需要设置所需的参数并插入密钥。 使用Nano打开TianWunderground.py文件,输入以下内容:
  1. nano TianWunderground.py
复制代码

然后编辑脚本顶部附近的部分:
  1. # --------- User Settings ---------
  2. STATE = "CA"
  3. CITY = "San_Francisco"
  4. WUNDERGROUND_API_KEY = "PLACE YOUR WUNDERGROUND API KEY HERE"
  5. BUCKET_NAME = ":partly_sunny: " + CITY + " Weather"
  6. BUCKET_KEY = "tianweatherhub"
  7. ACCESS_KEY = "PLACE YOUR INITIAL STATE ACCESS KEY HERE"
  8. MINUTES_BETWEEN_READS = 15
  9. METRIC_UNITS = False
  10. # ---------------------------------
复制代码

您需要设置所需的状态和城市。您还必须插入您的Wunderground API密钥和您的Intial State帐户访问密钥,否则您的数据不会去任何地方。 MINUTES_BETWEEN_READS参数将设置您的脚本轮询Wunderground API以获取天气信息的频率。 15分钟是一个很好的间隔长期。为了短期测试,您可以将其设置为0.5分钟。 METRIC_UNITS选项允许您选择华氏/摄氏度、MPH / KPH等。
一旦设置好参数,就可以运行脚本了:
  1. python TianWunderground.py
复制代码

如果您希望长时间不间断运行此脚本,可以使用nohup命令(不挂断),如下所示:
  1. opkg install coreutils-nohup
  2. nohup python TianWunderground.py &
复制代码

这个脚本将不仅仅是读取天气数据并将其发送到Initial State。该脚本将利用Initial State工具中的表情符号支持,使仪表板更加性感。您可以看到用于从current_observation - >icon state获取天气状态的逻辑,并将其转换为weather_icon函数中的表情符号。在wind_dir_icon功能中的moon_icon功能和风向的月相相似。

转到您的Initial State帐户并查看您的数据。上述仪表板的屏幕截图是在以15分钟间隔运行的数据收集9天后拍摄的。您可以通过使用每个图块右上角的cog图标更改图表类型并右键单击图块来调整大小/移动图形,来编辑仪表板。

该项目的下一步是从我们自己的传感器开始收集天气数据。

没有评论:

发表评论