风筝
发表于: 2017-5-18 16:57:20 | 显示全部楼层

复件 tian.png


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


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


第一部分:所需的设备

复件 01d324c2-394a-11e7-87c1-15c7b00a98fc.JPG

●     Arduino Tian开发板(https://store.arduino.cc/arduino-genuino/arduino-genuino-boards-modules/arduino-tian

●     Lucky扩展板 (https://www.amazon.com/Arduino-org-A000125-Arduino-Lucky-Shield/dp/B01F646GPW/

●     Micro-USB转USB线缆(http://www.amazon.com/Anker-Android-Samsung-Motorola-Blackberry/dp/B00MLP6HLS

●     Micro-USB充电器(https://www.amazon.com/Motorola-Micro-USB-Charger-Discontinued-Manufacturer/dp/B004EYSKM8


第二部分:配置Tian开发板

Tian开发板入门非常简单。


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

68747470733a2f2f63646e2d6c6561726e2e61646166727569742e636f6d2f6775696465732f696d.png


本文的大部分内容将在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

4a9a80d0-3646-11e7-9057-f4c567746db9.png


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


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


第三部分:Wunderground

wunderground.png


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


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


■    如何使用Wunderground API

Using the wunderground api.png


为了能够使用Wunderground API,首先我们需要自己的API密钥。获取API密钥可以很快实现,并且免费。

●    转到http://www.wunderground.com/weather/api/?MR=1

●    点击“Sign Up for FREE”!

       wunderground_home.png

●    创建一个帐户,然后单击确认电子邮件中发送给您的链接来激活您的帐户;

●    登陆

●    转到Pricing并选择免费的Stratus Plan(默认选择)。您每天进行500个API调用,费用是$ 0。获取Developer级别的API不需要信用卡。

       wunderground_key.png

●    点击“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
复制代码

例如,要获得加利福尼亚旧金山的天气:

●    http://api.wunderground.com/api/0def10027afaebb7/conditions/q/CA/San_Francisco.json

或者是伦敦的天气

●    http://api.wunderground.com/api/0def10027afaebb7/conditions/q/UK/London.json

或者是多伦多的天气

●    http://api.wunderground.com/api/0def10027afaebb7/conditions/q/canada/Toronto.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”页面底部找到您的访问密钥。它是一长串的字母和数字。

access-keys.png

每次创建数据流时,该访问密钥将将该数据流引导到您的帐户(所以不要与任何人共享您的密钥)。


步骤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图标查看测试数据。

51835fde-3178-11e7-88bb-990d4c3f404a.png

您可能需要通过Waves教程来熟悉如何使用此数据可视化工具。接下来,查看Tiles中的数据,以仪表板的形式查看相同的数据。

467128ce-3178-11e7-81de-bec91a142064.png

您现在可以开始从Wunderground获得实时数据流。


■    Wunderground仪表板

WundergroundDashboard.png


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

wunderground_dashboard.png


您也可以将此脚本复制到您的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图标更改图表类型并右键单击图块来调整大小/移动图形,来编辑仪表板。


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

跳转到指定楼层
风筝
发表于: 2017-5-19 10:48:46 | 显示全部楼层

第四部分:Lucky扩展板

a8c0a020-394a-11e7-90e4-d22320efc465.JPG


Lucky扩展板是一款非常酷的附加板,用于连接互联网的开发板,如Tian。 它附带了大量的传感器和功能:

●     继电器

●     PIR运动传感器

●     环境光传感器

●     湿度传感器

●     温度感应器

●     压力传感器

●     三轴磁力仪

●     3轴加速度计

●     蜂鸣器

●     游戏杆


对于这个项目,我们只需要从光、湿度、温度和压力传感器读取数据,但添加其他任何其他功能都是非常简单的!


要将Lucky扩展板附加到Tian开发板上,只需对齐针脚并按下即可。 当你这样做时,确保Tian开发板掉电!

c8183bd6-394a-11e7-8ebe-69958bad3a3a.JPG


■    从扩展板读取数据

Tian开发板上电,打开IDE。点击Tools并转到Board。从列表中选择“Arduino Tian”。在Tools下,转到Port,然后选择读取“Arduino Tian”(如果连接到您的计算机)的“/dev/tty.usbmodem****”。


现在您已经设置好IDE与Tian之间的交互,我们需要安装一个库来处理Lucky扩展板。


该项目只需要安装两个库,但是有一些可以使你的生活更简单,以及代码更短。它们也很容易安装。


这个库叫做“Lucky”。点击右栏底部的按钮,进入这里并下载zip。然后回到IDE,然后选择Sketch -> Include Library -> Manage Libraries....

a82da31e-3662-11e7-8a50-a47f8dded605.png


将出现一个窗口 - 在搜索框中输入“Lucky”。你应该看到这个弹出窗口:

5e80edf4-3665-11e7-884e-50af22d96440.png


选择该库并单击安装。


现在转到File -> Examples -> Lucky Shield,选择“LuckyTest”。您的开发板需要连接到笔记本电脑,并选择“Arduino Tian”端口。不幸的是,无法实现简单的串行监控。将LuckyTest框架上传到您的Tian开发板(右箭头按钮),等待几秒钟,然后打开串行显示器(放大镜图标)。确保波特率设置为9600!


您应该看到以下开始打印出来:

  1. LED1: 0 LED2: 1 REL1: 0 REL2: 1
  2. joy-D: 0 joy-R: 0 joy-L: 0  joy-U: 0  joy-C: 0
  3. x: -0.03  y: 0.00  z: 1.02
  4. Mx: -2374  My: 1793  Mz: -722
  5. Temperature = 32.92 *C
  6. Pressure = 998.87 hPa
  7. Approx. Altitude = 76.73 m
  8. Humidity = 23.59 %
  9. LED1: 0 LED2: 1 REL1: 0 REL2: 1
  10. joy-D: 0 joy-R: 0 joy-L: 0  joy-U: 0  joy-C: 0
  11. x: -0.02  y: -0.00  z: 1.04
  12. Mx: -2370  My: 1789  Mz: -715
  13. Temperature = 32.92 *C
  14. Pressure = 998.87 hPa
  15. Approx. Altitude = 76.55 m
  16. Humidity = 23.44 %
复制代码

现在我们在正常通讯!这些数据会很有用!


■    扩展板传输数据

现在到了该从我们的扩展板中传输数据了!


我们需要安装的下一个库是Ciao。 Ciao库让我们从Arduino扩展板中轻松传输数据。


按照与安装LucKy库完全相同的步骤,只是替换成搜索“ciao”。

4bdcd964-3666-11e7-939b-464141ceb92f.png


现在我们回到Arduino IDE,在Linino侧激活Ciao。 打开终端并输入以下命令:

  1. opkg update
  2. rm /etc/udev/udev.conf
  3. opkg upgrade arduinoos udev python-base python-light
  4. opkg install ciao
  5. reboot
复制代码

一旦你的Tian启动起来,准备运行LuckyStream.ino框架。 但首先将您的Initial State访问密钥添加到第11行。


上传框架代码,您应该会看到Wunderground中出现新的数据流。

e9b09174-394c-11e7-94db-38c666328726.png


第五部分:启动运行

现在我们可以从Weather Underground和Lucky扩展板传输数据,如果每次Tian上电后两者会自动传输数据,会不会变得更好?


幸运的是,在启动时运行.ino代码是Arduino的专长,python脚本呢?感谢Web IDE,Arduino也使得这个变得非常容易。 只需导航到您的Tian的IP地址或arduino.local,然后在菜单中找到Luci选项。 将会显示有许多选项卡的另一个窗口。 进入System -> Startup,并向下滚动到页面的底部。


你会看到一段代码。 将一下代码放在最后一行:

  1. python nohup /root/wunderground-sensehat/wunderground.py&
复制代码

保存更改并重新启动Tian。 您可以在几分钟内看到数据进入您的数据存储篮中!


译者注:本文译自https://github.com/initialstate/arduino-tian-weather-hub/wiki。如有错漏,敬请指正。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 705 | 回复: 1492



手机版|

GMT+8, 2024-12-4 01:31 , Processed in 0.063389 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

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