×

利用PocketBeagle的多合一系统开源设计

消耗积分:0 | 格式:zip | 大小:0.66 MB | 2023-07-07

123

分享资料个

动机

每天早上从查看短信、天气、电子邮件开始,有时,当您感觉非常好并且最重要的是,新闻。但是,要查看这些,您需要在手机上打开手机短信应用、天气应用和新闻应用,或者至少滚动浏览手机上的所有通知。

为了让我的早晨,希望你的早晨更轻松一些,我的目标是为你的床头柜制作一个屏幕,显示每日预报和当前温度,以及当天的新闻头条。一目了然,您可以看到开始新的一天所需了解的所有信息:如何穿着得体以及昨晚发生的时事。

概述:系统和电源框图

poYBAGOW5WmAUwUUAABNBQaCQII397.jpg

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 的软件方面。

pYYBAGOW5XqALkI7AARwDxYdY1I797.jpg

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 屏幕

硬件:

pYYBAGOW5aKAbUq9AAuVpJz9eKo848.jpg

从 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 跳线:

poYBAGOW5aeAZ5BVAACpoZPR1rw529.png

使用前先将液晶屏上的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(白线)。

pYYBAGOW5fSAFVdnAAuvX80VGBI268.jpg

按钮的电路连接。

具体来说,如果按钮被按下的次数是奇数,则显示天气预报。连接后,设备将开始运行。如果用户按下按钮一次,就会显示当天的天气预报。如果再按一次该按钮,新闻标题就会显示在 LCD 屏幕上。连续按下按钮将导致新闻标题和天气预报在 LCD 屏幕上交替显示。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !