10471| 8
|
LattePanda 地面站项目P2.2 起飞条件检测系统(CLI & GUI)1 |
前言 原创文章,转载引用务必注明链接,水平有限,如有疏漏,欢迎指正。 本文使用Markdown写成,为获得更好的阅读体验和正常的链接、图片显示,请访问我的博客原文: http://**ceres.comblogs.com/sjqlwy/p/lattepanda_pyui.html UPDATE: Part 2:【童叟咸欺】LattePanda 地面站项目P2.2 起飞条件检测系统2 https://mc.dfrobot.com.cn/forum.php?mod=viewthread&tid=25204 最近比较忙累,更新缓慢,烦请见谅。有问题欢迎PM。 本文测试环境:LattePanda:Windows 10 x64;Arduino 1.8.2;Python 3.6 + pyFirmata;TeamViewer 12|TightVNC C&S;host:Windows 7 x64 影响飞机飞行的六大气象因素
目前,我们可以获取气压、风力、云层、能见度等方面的数据,而四轴飞行器属于低空飞行,并不会受颠簸、结冰影响。为此,我们设计如下:
最简便且准确的途径就是获取天气预报啦,这里我们可以使用国内外诸多网站提供的服务API,可以在百度API Store查找使用各种免费收费服务。之前用过Yahoo、Weather等的API,这次无意中发现github上网友,非常棒,感谢LTonnyL整理的Awesome_APIs 列表(超链接已失效),有可能的话大家可以去star或者捐赠。 我们选择中央天气预报(非官方) 这个API,首先数据准确,其次使用异常简单。 使用方法讲得很清楚,数据格式为json,如果不进行格式化,输出结果如下: 其中\uXXXX为JS string,虽然有很多小工具如curl、httpie配合json格式化工具可以完成解码,但是为了后续拓展方便,我们使用Python + requests库来实现数据获取与处理。 获取天气状况测试环境:Python 3.6.1 for Windows;pyFirmata 1.0.3 (pyserial needed);requests 2.14.2 代码如下: [mw_shl_code=applescript,true][mw_shl_code=python,true]#!/usr/bin/env python3 #-*utf-8*- import requests def get_weather(): # use api from https://github.com/jokermonn/-Api/blob/master/CenterWeather.md weather = requests.get('http://tj.nineton.cn/Heart/index/all',params = 'city=CHJS070000') return weather.json() status = get_weather()['status'] cond = get_weather()['weather'][0]['now'] tomorrow = get_weather()['weather'][0]['future'][1] if status == 'OK': print("********当前天气********") print("当前城市:{0}\n当前天气状况: {1}\n温度: {2} ℃\n风向: {3}\n风速: {4} m/s\n风力大小: {5}\n空气湿度: {6}\n能见度: {7} km\n气压: {8} hPa".format(get_weather()['weather'][0]['city_name'], cond['text'], cond['temperature'], cond['wind_direction'], cond['wind_speed'], cond['wind_scale'], cond['humidity'], cond['visibility'], cond['pressure'])) print("********明日天气********") print("明日天气情况:{0}\n风力大小:{1}".format(tomorrow["text"], tomorrow['wind'])) if '雨' not in tomorrow['text']: affordable_wind = ('风力0级', '风力1级', '风力2级', '风力3级', '风力4级') if tomorrow['wind'] in affordable_wind: # 后续加入字体颜色 print("明日适宜飞行!") # 绿灯亮 else: # 后续加入字体颜色 print('明日不宜飞行!') # 红灯亮 else: print('failed to fetch weather condition of XuZhou!')[/mw_shl_code] 执行效果如下: 注意: 获取传感器数据与物理按钮控制 前文LattePanda 之深入学习 Firmata通讯有所介绍,我们这里先用简单的pyFirmata库进行演示模拟、数字传感器读写。最终效果为:读取光敏传感器、温湿度传感器数据进行显示(模拟、数字传感器读取),并且根据天气预报情况判断明日天气条件是否可以起飞,如果可以,则绿色led亮5s,否则红色led亮5s(数字写入)。未来加入物理大黄按钮进行控制(数字读取)。代码如下: [mw_shl_code=python,true]from pyfirmata import Arduino, util from time import sleep # 初始化串口 board = Arduino('COM5') print("********传感器数据********") it = util.Iterator(board) it.start() board.analog[0].enable_reporting() sleep(1) # 缓冲时间 # 待补充DHT11以及校准光敏传感器 print("环境亮度:{0}\n环境温度:{1}\n环境湿度:{2}\n".format(board.analog[0].read(), "N/A", "N/A")) board.analog[0].disable_reporting() # 绿灯亮 board.digital[9].write(1) sleep(5) board.digital[9].write(0) # 红灯亮 board.digital[10].write(1) sleep(5) board.digital[10].write(0)[/mw_shl_code] 注意:
整合两个功能,即可以得到命令行界面版控制界面完整源码 |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed