动机
每天早上从查看短信、天气、电子邮件开始,有时,当您感觉非常好并且最重要的是,新闻。但是,要查看这些,您需要在手机上打开手机短信应用、天气应用和新闻应用,或者至少滚动浏览手机上的所有通知。
为了让我的早晨,希望你的早晨更轻松一些,我的目标是为你的床头柜制作一个屏幕,显示每日预报和当前温度,以及当天的新闻头条。一目了然,您可以看到开始新的一天所需了解的所有信息:如何穿着得体以及昨晚发生的时事。
概述:系统和电源框图
1 / 2 •系统框图
使用 Wifi Dongle 连接到 Wifi
要连接到 wifi,我需要一个 microUSB 接口、USB 转 microUSB 适配器和一个 wifi 加密狗。在PocketBeagle上,我首先将引脚VBUS(P1_5)和VIN(P1_7)焊接在一起,并将引脚ID(P1_13)和GND(P1_15)焊接在一起,以备使用。然后,我将 microUSB 分线板连接到 PocketBeagle 上的 USB1 总线(引脚 7-15)。最后,我将 wifi 适配器插入 USB 转 microUSB 适配器。有了 wifi 加密狗的硬件,我继续进行连接到 wifi 的软件方面。
USB-A 适配器和 wifi 加密狗。
在 Linux Cloud9 终端中,我运行以下代码来连接到 wifi:
debian@beaglebone:/var/lib/cloud9/ENGI301/Project_01$ connmanctl
connmanctl》 enable wifi
Error wifi: Already enabled
connmanctl》 scan wifi
Scan completed for wifi
connmanctl》 services
*AR Rice IoT wifi_74da38de508b_5269636520496f54_managed_none
*A Rice Visitor wifi_74da38de508b_526963652056697369746f72_managed_none
Rice Owls wifi_74da38de508b_52696365204f776c73_managed_ieee8021x
eduroam wifi_74da38de508b_656475726f616d_managed_ieee8021x
DIRECT-f3-HP M15 LaserJet wifi_74da38de508b_4449524543542d66332d4850204d3135204c617365724a6574_managed_psk
connmanctl》 agent on
Agent registered
connmanctl》 connect wifi_74da38de508b_526963652056697369746f72_managed_none
Connected wifi_74da38de508b_526963652056697369746f72_managed_none
检索天气数据
为了检索每日预报,我使用了 PyOWM,它是 OpenWeatherMap 的客户端 Python 包装库。OpenWeatherMap ( http://openweathermap.com/ ) 是一种 API,可用于通过 API 密钥检索天气数据。
from pyowm import OWM
我创建了一个免费帐户并收到了一个 API 密钥(免费订阅*)。
API_key = ‘ada0a3424a34c9445c81fba49df33410’
owm = OWM(API_key)
接下来,对于我想要收集数据的位置,我找到了得克萨斯州休斯顿市的城市 ID,即 4699006。
#For Houston (city ID = 46990066)
obs = owm.weather_at_id(4699066)
定义这些变量后,我使用 get_weather 和 get_temperature 收集了三个温度测量值。可以在 PyOWM 文档的以下链接中找到其他查询和电话:
https://buildmedia.readthedocs.org/media/pdf/pyowm/latest/pyowm.pdf
# Retrieve daily lows and highs as well as the current temperature
w = obs.get_weather()
temp = w.get_temperature(‘fahrenheit’)
*免费订阅对您可以调用和访问的数据有限制。幸运的是,我可以访问当前温度以及当天的高低温。有关订阅访问的更多信息,请访问http://openweathermap.com/。
检索新闻标题
为了检索每日新闻标题,我导入了许多库:
要求
bs4(美丽汤)
JSON
约会时间
“requests”是一个库,当我从纽约时报网站上抓取数据(头条新闻)时,它可以帮助我们发出 HTTP 请求。
import requests
url = “https://www.nytimes.com/”
r = requests.get(url)
“bs4”是一个帮助从 HTML 中解析数据的库。有关 bs4 用法的更多信息,请访问:https ://www.crummy.com/software/BeautifulSoup/bs4/doc/ 。
from bs4 import BeautifulSoup
r_html = r.text
soup = BeautifulSoup(r_html, “html.parser”)
scripts = soup.find_all(‘script’)
“json”是一个可以编码和解码 JSON 的库,JSON 是用 JavaScript 对象表示法编写的文本。我使用 json 将 JSON 从网络抓取的数据解码为 Python。
import json
for script in scripts:
if ‘preloadedData’ in script.text:
jsonStr = script.text
jsonStr = jsonStr.split(‘=’, 1)[1].strip()
jsonStr = jsonStr.rsplit(‘;’, 1)[0]
jsonObj = json.loads(jsonStr)
使用这些库,我可以找到并抓取新闻标题,以便稍后在 LCD 屏幕上显示。
设置 LCD 屏幕
硬件:
从 LCD 屏幕到 PocketBeagle 上的 GPIO 和 SPI0 的连接。
为了将 LCD 屏幕物理连接到 PocketBeagle,我在 LCD 屏幕上使用了引脚 Vin、GND、CLK、MISO、MOSI、CS、D/C 和 RST。我将这些引脚连接到 PocketBeagle(SPI0 和 GPIO)上它们各自的引脚。可以在本文档末尾的烧结图中找到这些连接。
我遵循了 LCD 屏幕制造商提供的说明,可在此处找到:https://learn.adafruit.com/adafruit-2-dot-8-color-tft-touchscreen-breakout-v2/overview。*
*起初,尽管连接正确,但我的 LCD 屏幕并未与 PocketBeagle 连接。后来我发现是因为我错过了关键的一步;必须通过焊接闭合 LCD 屏幕背面的 IM1、IM2 和 IM3 跳线:
使用前先将液晶屏上的IM1、IM2、IM3插孔焊好。
软件:
为了在 PocketBeagle 上设置和使用 LCD 屏幕,我导入了几个库。我设置和使用 LCD 屏幕的分步过程基于制造商在此处提供的一组基本说明:http ://learn.adafruit.com/adafruit-2-dot-8-color- tft-touchscreen-breakout-v2 。
数码
木板
太平船务
adafruit_rgb_display
Adafruit_BBIO
时间
文本换行
“digitalio”是一个提供基本数字引脚支持的库。
“板”是一个库,用于描述和设置使用的引脚和板。“digitalio”和“board”一起使用:
import board
import digitalio
cs_pin = digitalio.DigitalInOut(board.P2_2)
dc_pin = digitalio.DigitalInOut(board.P2_4)
reset_pin = digitalio.DigitalInOut(board.P2_6)
spi = board.SPI()
“PIL”是 Python 图像库。我特别发现此链接对于了解模块和与模块相关的用法非常有用:https ://pillow.readthedocs.io/en/stable/ 。该库用于实际显示文本(天气更新和新闻标题)液晶屏。
from PIL import Image, ImageDraw, ImageFont
“adafruit_rgb_display”是用于连接 LCD 屏幕 (ILI9341) 的库。该库是通过 LCD 屏幕的供应商推荐的。我按照此驱动程序的说明操作:https ://github.com/adafruit/Adafruit_CircuitPython_RGB_Display 。
import adafruit_rgb_display.ili9341 as ili9341
disp = ili9341.ILI9341(spi, rotation=90, cs=cs_pin, dc=dc_pin, rst=reset_pin,
baudrate=BAUDRATE)
为了遵循这一点,我还必须在安装驱动程序之前安装驱动程序的依赖项。说明可在此处找到:https ://github.com/adafruit/CircuitPython_Community_Bundle 。为了将此驱动程序用于 ILI9341,还进行了其他安装(在驱动程序的 README 文件中进行了描述)。通常,我按照以下步骤安装必要的驱动程序:
sudo pip3 install Adafruit_Blinka
# if the Adafruit_Blinka installation does not work:
# sudo apt-get install python-setuptools
# sudo apt-get install python-dev
pip3 install adafruit-circuitpython-lis3dh
# Download the bundle zip file from the (CircuitPython_Community_Bundle link)
git submodule init
git submodule update
sudo apt-get install python3-venv
python3 -m venv .env
source .env/bin/activate
pip install circuitpython-build-tools
source .env/bin/activate
circuitpython-build-bundles --filename_prefix adafruit-circuitpython-bundle --library_location libraries --library_depth 2
sudo pip3 install adafruit-circuitpython-rgb-display
Adafruit_Blinka 镜像 CircuitPython,这样我就可以使用其他库,例如“board”和“digitalio”。Digitalio 和板用于定义和描述 PocketBeagle 的引脚输出,以便我们可以设置显示。
使用“Adafruit_BBIO”以便我可以使用 GPIO 引脚,特别是按钮。使用这个库,用户可以通过按下按钮来控制显示。
import Adafruit_BBIO.GPIO as GPIO
“时间”是一个库,我专门用来记录按下按钮时经过的时间。记录时间是必不可少的,因为当按下按钮超过 2 秒时,设备将停止运行脚本。当按下按钮少于 2 秒时,用户可以在查看当天的天气预报和新闻标题之间切换。
在液晶屏上显示
为了在 LCD 屏幕上显示内容,我们使用 PIL 库,如下所示。此外,我还下载了一个不同字体的 zip 文件来帮助定义“fnt”。
def createRGB(disp):
if disp.rotation % 180 == 90:
height = disp.width # we swap height/width to rotate it to landscape!
width = disp.height
else:
width = disp.width # we swap height/width to rotate it to landscape!
height = disp.height
image = Image.new(‘RGB’, (width, height))
# Reset the display
draw = ImageDraw.Draw(image)
draw.rectangle((0, 0, width, height), outline=0, fill=(0, 0, 0))
disp.image(image)
# Display the desired output
fnt = ImageFont.truetype(‘Pillow-master/Tests/fonts/FreeMono.ttf’, 16)
draw.text((0,0), text=cleand, fill = (255,255,255), font=fnt)
disp.image(image)
return createRGB(disp)
使用按钮控制显示
我的设备允许用户通过按下按钮来控制他们希望看到的信息(天气预报或新闻标题)。
我使用一个 1k 欧姆电阻将按钮添加到从一个输入到按钮的 3.3V 输入,并将对角线引脚从 3.3V 输入连接到 PocketBeagle 上的 GPIO(白线)。
按钮的电路连接。
具体来说,如果按钮被按下的次数是奇数,则显示天气预报。连接后,设备将开始运行。如果用户按下按钮一次,就会显示当天的天气预报。如果再按一次该按钮,新闻标题就会显示在 LCD 屏幕上。连续按下按钮将导致新闻标题和天气预报在 LCD 屏幕上交替显示。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !