精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

怎樣將PyPortal設置為圖像查看器

454398 ? 來源:網絡整理 ? 作者:網絡整理 ? 2019-11-27 17:04 ? 次閱讀

概述

怎樣將PyPortal設置為圖像查看器

SPAAAAAACE!誰不想看到無窮無盡的太空照片?

NASA的每日天文圖片(APOD)網站提供了標題中所說的內容,每天都有一張令人難以置信的嶄新太空照片。現在,您可以將PyPortal設置為這些光榮圖像的專用查看器!

您將使用CircuitPython對其進行編碼,并且PyPortal庫將使查詢NASA Open API的過程變得簡單。圖像。

零件

Adafruit PyPortal-CircuitPython支持的Internet顯示

產品ID:4116

PyPortal,我們易于使用的物聯網設備,可讓您在幾分鐘內為“物聯網”創建所有東西。制作自定義觸摸屏界面。..

$ 54.95

進貨

添加到購物車

Adafruit PyPortal桌面支架附件包

產品ID:4146

PyPortal是我們易于使用的IoT設備,可讓您在數分鐘內為“物聯網”創建所有東西。創建小口袋。..

$ 9.95

進貨

添加到購物車

完全可反轉的粉紅色/紫色USB A至micro B電纜- 1m長

產品ID:4111

該電纜不僅非常時尚,而且具有粉紅色和紫色Blinka編織圖案,而且完全可逆!沒錯,您每天可以節省。..秒。..

$ 3.95

入庫存

添加到購物車

安裝CircuitPython

CircuitPython是MicroPython的派生版,旨在簡化低成本微控制器上的實驗和教學。它不需要任何前期桌面軟件下載,因此比以往任何時候都更容易獲得原型。只需復制并編輯 CIRCUITPY “閃存”驅動器上的文件即可進行迭代。

以下說明將向您展示如何安裝CircuitPython。如果您已經安裝了CircuitPython,但希望對其進行更新或重新安裝,則同樣的步驟也適用!

設置CircuitPython快速入門!

請遵循以下快速逐步操作以獲取超快速的Python功能:)

通過CircuitPython.org為該板下載最新版本的CircuitPython

點擊上面的鏈接,為PyPortal下載最新版本的CircuitPython。

下載并將其保存到您的桌面(或方便的任何地方)。

使用已知良好的USB電纜將PyPortal插入計算機。

A很多人最終使用僅可充電的USB電纜,這非常令人沮喪!因此,請確保您擁有知道對數據同步有用的USB電纜。

雙擊中間頂部頂部的重置按鈕(洋紅色箭頭)在板上,您將看到NeoPixel RGB LED(綠色箭頭)變為綠色。如果它變成紅色,請檢查USB電纜,嘗試使用另一個USB端口,等等。注意:USB接口旁邊的紅色小LED指示燈將呈紅色閃爍。沒關系!

如果第一次雙擊不起作用,請重試。有時可能需要一些嘗試才能使節奏正確!

您將看到一個名為 PORTALBOOT 。

將 adafruit-circuitpython-pyportal- .uf2 文件拖到 PORTALBOOT。

LED將閃爍。然后, PORTALBOOT 驅動器將消失,并且將出現一個名為 CIRCUITPY 的新磁盤驅動器。

如果未在板上添加任何代碼,唯一存在的文件是 boot_out.txt 。這是絕對正常的!是時候添加您的 code.py 并開始使用它了!

就這樣,您完成了! :)

PyPortal默認文件

單擊下面的按鈕,下載PyPortal附帶的文件的zip。

PyPortal默認文件

PyPortal CircuitPython設置

要在CircuitPython中使用PyPortal的所有出色功能,必須首先安裝許多庫。本頁涵蓋了該過程。

Adafruit CircuitPython捆綁包

下載Adafruit CircuitPython庫捆綁包。您可以在此處找到最新版本:

最新的Adafruit CircuitPython庫包

下載 adafruit-circuitpython-bundle-4。 x-mpy-*。zip 捆綁zip文件,然后解壓縮同名文件夾。在內部,您會找到一個 lib 文件夾。您有兩個選擇:

您可以將 lib 文件夾添加到您的 CIRCUITPY 驅動器中。這將確保您擁有所有驅動程序。但是這將占用8 MB磁盤上的一堆空間

根據需要添加每個庫,這將減少空間使用量,但您需要

至少,我們推薦以下庫,實際上我們比推薦的要多。基本上是必需的。因此,立即抓住它們并將它們安裝到 CIRCUITPY/lib !

adafruit_esp32spi -這是一個庫,可通過ESP32進行互聯網訪問使用(您猜對了!)SPI傳輸。 Internet所需的任何東西都需要使用它

adafruit_requests -該庫使我們能夠執行HTTP請求并從服務器獲取響應。 GET/POST/PUT/PATCH-它們都在這里!

adafruit_pyportal -這是我們友好的包裝器庫,可處理很多項目,顯示圖形和文本,從互聯網上獲取數據。

adafruit_touchscreen -一個用于從電阻式觸摸屏讀取觸摸的庫。

adafruit_cursorcontrol -用于讀取PyGamer和PyBadge游戲桿和按鈕的庫。為您處理所有圖形,按鈕閱讀和操縱桿移動。

adafruit_io -該庫有助于將PyPortal連接到我們的免費數據記錄和查看服務

adafruit_imageload -任何圖形所需的圖像顯示助手!

adafruit_display_text -毫不奇怪,它在屏幕上顯示文本

adafruit_bitmap_font -我們擁有精美的字體支持,并且易于制作新字體。該庫讀取并解析字體文件。

adafruit_slideshow -用于制作圖像幻燈片-方便快速顯示圖形和聲音

neopixel -用于控制板載新像素

adafruit_adt7410 -用于從板載Analog Devices ADT7410精密溫度傳感器讀取溫度的庫

adafruit_sdcard -支持從板載SD卡插槽中讀取/寫入數據。

adafruit_bus_device -對I2C/SPI的低級支持

Internet連接!

一旦您安裝了CircuitPython安裝程序和庫,我們就可以將您的電路板連接到Internet。請注意,目前不支持訪問企業級安全的WiFi網絡,僅支持需要SSID和密碼的WiFi網絡。

要建立連接,您需要先創建一個秘密文件。

什么是機密文件?

我們希望人們在構建CircuitPython WiFi小部件時共享大量項目。我們要避免的是人們不小心共享了他們的密碼或秘密令牌和API密鑰。因此,我們設計了所有示例,以使用 CIRCUITPY 驅動器中的secrets.py文件來保存秘密/私有/自定義數據。這樣,您就可以共享您的主項目,而不必擔心意外共享私有內容。

您的 secrets.py 文件應如下所示:

下載:文件

復制代碼

# This file is where you keep secret settings, passwords, and tokens!

# If you put them in the code you risk committing that info or sharing it

secrets = {

‘ssid’ : ‘home ssid’,

‘password’ : ‘my password’,

‘timezone’ : “America/New_York”, # http://worldtimeapi.org/timezones

‘github_token’ : ‘fawfj23rakjnfawiefa’,

‘hackaday_token’ : ‘h4xx0rs3kret’,

}

# This file is where you keep secret settings, passwords, and tokens!

# If you put them in the code you risk committing that info or sharing it

secrets = {

‘ssid’ : ‘home ssid’,

‘password’ : ‘my password’,

‘timezone’ : “America/New_York”, # http://worldtimeapi.org/timezones

‘github_token’ : ‘fawfj23rakjnfawiefa’,

‘hackaday_token’ : ‘h4xx0rs3kret’,

}

Inside是一個名為secrets的python字典,每個條目都有一行。每個條目都有一個條目名稱(例如‘ssid’),然后是一個冒號以將其與條目鍵‘home ssid’分開,最后是一個逗號,

至少您需要ssid和password用于您的本地WiFi設置。在創建項目時,您可能需要更多的令牌和密鑰,只需一次添加一行即可。例如,請參見其他令牌,例如用于訪問github或hackaday API的令牌。其他非機密數據(例如您的時區)也可以在此處,僅因為其稱為機密的信息并不意味著您不能在其中包含常規的自定義數據!

有關正確的時區字符串,請查看http://worldtimeapi.org/timezones,請記住,如果未列出您的城市,請在同一時區中查找城市,例如,波士頓,紐約,費城,華盛頓特區和邁阿密都與紐約位于同一時間。

當然,不要共享您的 secrets.py -將其保存在GitHub,Discord或其他項目共享站點之外。

連接到WiFi

好,現在您已設置好機密-您可以連接到Internet。讓我們使用ESP32SPI和Requests庫-您需要訪問CircuitPython捆綁包并安裝:

adafruit_bus_device

adafruit_esp32spi

adafruit_requests

neopixel

進入您的lib文件夾。完成后,使用Mu或您喜歡的編輯器加載以下示例:

下載:項目郵編或 esp32spi_simpletest.py | 在Github上查看

復制代碼

import board

import busio

from digitalio import DigitalInOut

import adafruit_esp32spi.adafruit_esp32spi_socket as socket

from adafruit_esp32spi import adafruit_esp32spi

import adafruit_requests as requests

print(“ESP32 SPI webclient test”)

TEXT_URL = “http://wifitest.adafruit.com/testwifi/index.html”

JSON_URL = “http://api.coindesk.com/v1/bpi/currentprice/USD.json”

# If you are using a board with pre-defined ESP32 Pins:

esp32_cs = DigitalInOut(board.ESP_CS)

esp32_ready = DigitalInOut(board.ESP_BUSY)

esp32_reset = DigitalInOut(board.ESP_RESET)

# If you have an externally connected ESP32:

# esp32_cs = DigitalInOut(board.D9)

# esp32_ready = DigitalInOut(board.D10)

# esp32_reset = DigitalInOut(board.D5)

spi = busio.SPI(board.SCK, board.MOSI, board.MISO)

esp = adafruit_esp32spi.ESP_SPIcontrol(spi, esp32_cs, esp32_ready, esp32_reset)

requests.set_socket(socket, esp)

if esp.status == adafruit_esp32spi.WL_IDLE_STATUS:

print(“ESP32 found and in idle mode”)

print(“Firmware vers.”, esp.firmware_version)

print(“MAC addr:”, [hex(i) for i in esp.MAC_address])

for ap in esp.scan_networks():

print(“ %s RSSI: %d” % (str(ap[‘ssid’], ‘utf-8’), ap[‘rssi’]))

print(“Connecting to AP.。.”)

while not esp.is_connected:

try:

esp.connect_AP(b‘MY_SSID_NAME’, b‘MY_SSID_PASSWORD’)

except RuntimeError as e:

print(“could not connect to AP, retrying: ”,e)

continue

print(“Connected to”, str(esp.ssid, ‘utf-8’), “ RSSI:”, esp.rssi)

print(“My IP address is”, esp.pretty_ip(esp.ip_address))

print(“IP lookup adafruit.com: %s” % esp.pretty_ip(esp.get_host_by_name(“adafruit.com”)))

print(“Ping google.com: %d ms” % esp.ping(“google.com”))

#esp._debug = True

print(“Fetching text from”, TEXT_URL)

r = requests.get(TEXT_URL)

print(‘-’*40)

print(r.text)

print(‘-’*40)

r.close()

print()

print(“Fetching json from”, JSON_URL)

r = requests.get(JSON_URL)

print(‘-’*40)

print(r.json())

print(‘-’*40)

r.close()

print(“Done!”)

import board

import busio

from digitalio import DigitalInOut

import adafruit_esp32spi.adafruit_esp32spi_socket as socket

from adafruit_esp32spi import adafruit_esp32spi

import adafruit_requests as requests

print(“ESP32 SPI webclient test”)

TEXT_URL = “http://wifitest.adafruit.com/testwifi/index.html”

JSON_URL = “http://api.coindesk.com/v1/bpi/currentprice/USD.json”

# If you are using a board with pre-defined ESP32 Pins:

esp32_cs = DigitalInOut(board.ESP_CS)

esp32_ready = DigitalInOut(board.ESP_BUSY)

esp32_reset = DigitalInOut(board.ESP_RESET)

# If you have an externally connected ESP32:

# esp32_cs = DigitalInOut(board.D9)

# esp32_ready = DigitalInOut(board.D10)

# esp32_reset = DigitalInOut(board.D5)

spi = busio.SPI(board.SCK, board.MOSI, board.MISO)

esp = adafruit_esp32spi.ESP_SPIcontrol(spi, esp32_cs, esp32_ready, esp32_reset)

requests.set_socket(socket, esp)

if esp.status == adafruit_esp32spi.WL_IDLE_STATUS:

print(“ESP32 found and in idle mode”)

print(“Firmware vers.”, esp.firmware_version)

print(“MAC addr:”, [hex(i) for i in esp.MAC_address])

for ap in esp.scan_networks():

print(“ %s RSSI: %d” % (str(ap[‘ssid’], ‘utf-8’), ap[‘rssi’]))

print(“Connecting to AP.。.”)

while not esp.is_connected:

try:

esp.connect_AP(b‘MY_SSID_NAME’, b‘MY_SSID_PASSWORD’)

except RuntimeError as e:

print(“could not connect to AP, retrying: ”,e)

continue

print(“Connected to”, str(esp.ssid, ‘utf-8’), “ RSSI:”, esp.rssi)

print(“My IP address is”, esp.pretty_ip(esp.ip_address))

print(“IP lookup adafruit.com: %s” % esp.pretty_ip(esp.get_host_by_name(“adafruit.com”)))

print(“Ping google.com: %d ms” % esp.ping(“google.com”))

#esp._debug = True

print(“Fetching text from”, TEXT_URL)

r = requests.get(TEXT_URL)

print(‘-’*40)

print(r.text)

print(‘-’*40)

r.close()

print()

print(“Fetching json from”, JSON_URL)

r = requests.get(JSON_URL)

print(‘-’*40)

print(r.json())

print(‘-’*40)

r.close()

print(“Done!”)

,并將其保存到您的板上,名稱為code.py。

第一個連接示例不使用機密文件-您將首先輸入SSID/密碼來驗證連接性!

然后轉到此行

esp.connect_AP(b‘MY_SSID_NAME’, b‘MY_SSID_PASSWORD’)

并更改MY_SSID_NAME和 MY_SSID_PASSWORD 設置為您的訪問點名稱和密碼,并將其保留在‘’引號內。 (此示例不使用機密文件,但它也非常獨立,因此,如果其他事情似乎不起作用,則可以始終重新加載該文件。您應該獲得如下內容:

示例代碼。..

使用SPI端口和3個控制引腳通過SPI初始化ESP32:

下載:文件

復制代碼

esp32_cs = DigitalInOut(board.ESP_CS)

esp32_ready = DigitalInOut(board.ESP_BUSY)

esp32_reset = DigitalInOut(board.ESP_RESET)

spi = busio.SPI(board.SCK, board.MOSI, board.MISO)

esp = adafruit_esp32spi.ESP_SPIcontrol(spi, esp32_cs, esp32_ready, esp32_reset) esp32_cs = DigitalInOut(board.ESP_CS)

esp32_ready = DigitalInOut(board.ESP_BUSY)

esp32_reset = DigitalInOut(board.ESP_RESET)

spi = busio.SPI(board.SCK, board.MOSI, board.MISO)

esp = adafruit_esp32spi.ESP_SPIcontrol(spi, esp32_cs, esp32_ready, esp32_reset)

告訴我們的requests庫我們正在使用的套接字的類型(套接字類型隨連接類型而變化-在此示例中,我們將使用adafruit_esp32spi_socket)。還將接口設置為

下載:文件

復制代碼

esp requests

驗證找到ESP32,檢查固件和MAC地址

下載:文件

復制代碼

requests.set_socket(socket, esp) requests.set_socket(socket, esp)

掃描它可以看到的所有訪問點,并打印出名稱和信號強度:

下載:文件

復制代碼

if esp.status == adafruit_esp32spi.WL_IDLE_STATUS:

print(“ESP32 found and in idle mode”)

print(“Firmware vers.”, esp.firmware_version)

print(“MAC addr:”, [hex(i) for i in esp.MAC_address]) if esp.status == adafruit_esp32spi.WL_IDLE_STATUS:

print(“ESP32 found and in idle mode”)

print(“Firmware vers.”, esp.firmware_version)

print(“MAC addr:”, [hex(i) for i in esp.MAC_address])

連接到我們在此處定義的AP,然后打印出來本地IP地址,嘗試進行域名查找并ping google.com以檢查網絡連接(請注意,有時ping失敗或需要一段時間,這沒什么大不了的)

下載:文件

復制代碼

for ap in esp.scan_networks():

print(“ %s RSSI: %d” % (str(ap[‘ssid’], ‘utf-8’), ap[‘rssi’])) for ap in esp.scan_networks():

print(“ %s RSSI: %d” % (str(ap[‘ssid’], ‘utf-8’), ap[‘rssi’]))

好的,現在我們進入真正有趣的部分。使用SAMD51或其他大容量RAM(超過32 KB)設備,我們可以做很多巧妙的事情。例如,我們可以像請求一樣實現一個接口,這使得獲取數據非常簡單

從Web URL調用 print(“Connecting to AP.。.”)

esp.connect_AP(b‘MY_SSID_NAME’, b‘MY_SSID_PASSWORD’)

print(“Connected to”, str(esp.ssid, ‘utf-8’), “ RSSI:”, esp.rssi)

print(“My IP address is”, esp.pretty_ip(esp.ip_address))

print(“IP lookup adafruit.com: %s” % esp.pretty_ip(esp.get_host_by_name(“adafruit.com”)))

print(“Ping google.com: %d ms” % esp.ping(“google.com”))

中讀取所有文本-您可以傳入 print(“Connecting to AP.。.”)

esp.connect_AP(b‘MY_SSID_NAME’, b‘MY_SSID_PASSWORD’)

print(“Connected to”, str(esp.ssid, ‘utf-8’), “ RSSI:”, esp.rssi)

print(“My IP address is”, esp.pretty_ip(esp.ip_address))

print(“IP lookup adafruit.com: %s” % esp.pretty_ip(esp.get_host_by_name(“adafruit.com”)))

print(“Ping google.com: %d ms” % esp.ping(“google.com”))

用于SSL連接的URL

下載:文件

復制代碼

requests.get https

或者,如果數據使用結構化JSON,則可以獲取json pre -解析為可以輕松查詢或遍歷的Python字典。 (同樣,僅適用于nRF52840,M4和其他高RAM板)

下載:文件

復制代碼

TEXT_URL = “http://wifitest.adafruit.com/testwifi/index.html”

print(“Fetching text from”, TEXT_URL)

r = requests.get(TEXT_URL)

print(‘-’*40)

print(r.text)

print(‘-’*40)

r.close() TEXT_URL = “http://wifitest.adafruit.com/testwifi/index.html”

print(“Fetching text from”, TEXT_URL)

r = requests.get(TEXT_URL)

print(‘-’*40)

print(r.text)

print(‘-’*40)

r.close()

Requests

我們已經為Web接口編寫了一個類似請求的庫,名為Adafruit_CircuitPython_Requests。該庫允許您發送HTTP/1.1請求,而無需“設計”它們,并提供了有用的方法來解析服務器的響應。

下載:Project Zip 或 requests_simpletest.py | 在Github上查看

復制代碼

JSON_URL = “http://api.coindesk.com/v1/bpi/currentprice/USD.json”

print(“Fetching json from”, JSON_URL)

r = requests.get(JSON_URL)

print(‘-’*40)

print(r.json())

print(‘-’*40)

r.close() JSON_URL = “http://api.coindesk.com/v1/bpi/currentprice/USD.json”

print(“Fetching json from”, JSON_URL)

r = requests.get(JSON_URL)

print(‘-’*40)

print(r.json())

print(‘-’*40)

r.close()

代碼首先設置ESP32SPI接口。然后,它使用ESP32 # adafruit_requests usage with an esp32spi_socket

import board

import busio

from digitalio import DigitalInOut

import adafruit_esp32spi.adafruit_esp32spi_socket as socket

from adafruit_esp32spi import adafruit_esp32spi

import adafruit_requests as requests

# If you are using a board with pre-defined ESP32 Pins:

esp32_cs = DigitalInOut(board.ESP_CS)

esp32_ready = DigitalInOut(board.ESP_BUSY)

esp32_reset = DigitalInOut(board.ESP_RESET)

# If you have an externally connected ESP32:

# esp32_cs = DigitalInOut(board.D9)

# esp32_ready = DigitalInOut(board.D10)

# esp32_reset = DigitalInOut(board.D5)

spi = busio.SPI(board.SCK, board.MOSI, board.MISO)

esp = adafruit_esp32spi.ESP_SPIcontrol(spi, esp32_cs, esp32_ready, esp32_reset)

print(“Connecting to AP.。.”)

while not esp.is_connected:

try:

esp.connect_AP(b‘MY_SSID_NAME’, b‘MY_SSID_PASSWORD’)

except RuntimeError as e:

print(“could not connect to AP, retrying: ”,e)

continue

print(“Connected to”, str(esp.ssid, ‘utf-8’), “ RSSI:”, esp.rssi)

# Initialize a requests object with a socket and esp32spi interface

requests.set_socket(socket, esp)

TEXT_URL = “http://wifitest.adafruit.com/testwifi/index.html”

JSON_GET_URL = “http://httpbin.org/get”

JSON_POST_URL = “http://httpbin.org/post”

print(“Fetching text from %s”%TEXT_URL)

response = requests.get(TEXT_URL)

print(‘-’*40)

print(“Text Response: ”, response.text)

print(‘-’*40)

response.close()

print(“Fetching JSON data from %s”%JSON_GET_URL)

response = requests.get(JSON_GET_URL)

print(‘-’*40)

print(“JSON Response: ”, response.json())

print(‘-’*40)

response.close()

data = ‘31F’

print(“POSTing data to {0}: {1}”.format(JSON_POST_URL, data))

response = requests.post(JSON_POST_URL, data=data)

print(‘-’*40)

json_resp = response.json()

# Parse out the ‘data’ key from json_resp dict.

print(“Data received from server:”, json_resp[‘data’])

print(‘-’*40)

response.close()

json_data = {“Date” : “July 25, 2019”}

print(“POSTing data to {0}: {1}”.format(JSON_POST_URL, json_data))

response = requests.post(JSON_POST_URL, json=json_data)

print(‘-’*40)

json_resp = response.json()

# Parse out the ‘json’ key from json_resp dict.

print(“JSON Data received from server:”, json_resp[‘json’])

print(‘-’*40)

response.close()

和# adafruit_requests usage with an esp32spi_socket

import board

import busio

from digitalio import DigitalInOut

import adafruit_esp32spi.adafruit_esp32spi_socket as socket

from adafruit_esp32spi import adafruit_esp32spi

import adafruit_requests as requests

# If you are using a board with pre-defined ESP32 Pins:

esp32_cs = DigitalInOut(board.ESP_CS)

esp32_ready = DigitalInOut(board.ESP_BUSY)

esp32_reset = DigitalInOut(board.ESP_RESET)

# If you have an externally connected ESP32:

# esp32_cs = DigitalInOut(board.D9)

# esp32_ready = DigitalInOut(board.D10)

# esp32_reset = DigitalInOut(board.D5)

spi = busio.SPI(board.SCK, board.MOSI, board.MISO)

esp = adafruit_esp32spi.ESP_SPIcontrol(spi, esp32_cs, esp32_ready, esp32_reset)

print(“Connecting to AP.。.”)

while not esp.is_connected:

try:

esp.connect_AP(b‘MY_SSID_NAME’, b‘MY_SSID_PASSWORD’)

except RuntimeError as e:

print(“could not connect to AP, retrying: ”,e)

continue

print(“Connected to”, str(esp.ssid, ‘utf-8’), “ RSSI:”, esp.rssi)

# Initialize a requests object with a socket and esp32spi interface

requests.set_socket(socket, esp)

TEXT_URL = “http://wifitest.adafruit.com/testwifi/index.html”

JSON_GET_URL = “http://httpbin.org/get”

JSON_POST_URL = “http://httpbin.org/post”

print(“Fetching text from %s”%TEXT_URL)

response = requests.get(TEXT_URL)

print(‘-’*40)

print(“Text Response: ”, response.text)

print(‘-’*40)

response.close()

print(“Fetching JSON data from %s”%JSON_GET_URL)

response = requests.get(JSON_GET_URL)

print(‘-’*40)

print(“JSON Response: ”, response.json())

print(‘-’*40)

response.close()

data = ‘31F’

print(“POSTing data to {0}: {1}”.format(JSON_POST_URL, data))

response = requests.post(JSON_POST_URL, data=data)

print(‘-’*40)

json_resp = response.json()

# Parse out the ‘data’ key from json_resp dict.

print(“Data received from server:”, json_resp[‘data’])

print(‘-’*40)

response.close()

json_data = {“Date” : “July 25, 2019”}

print(“POSTing data to {0}: {1}”.format(JSON_POST_URL, json_data))

response = requests.post(JSON_POST_URL, json=json_data)

print(‘-’*40)

json_resp = response.json()

# Parse out the ‘json’ key from json_resp dict.

print(“JSON Data received from server:”, json_resp[‘json’])

print(‘-’*40)

response.close()

對象初始化request對象。

下載:文件

復制代碼

socket esp

帶有請求的HTTP GET

代碼向Adafruit的WiFi測試網站-http:/發出HTTP GET請求/wifitest.adafruit.com/testwifi/index.html。

為此,我們會將URL傳遞到import board

import busio

from digitalio import DigitalInOut

import adafruit_esp32spi.adafruit_esp32spi_socket as socket

from adafruit_esp32spi import adafruit_esp32spi

import adafruit_requests as requests

# If you are using a board with pre-defined ESP32 Pins:

esp32_cs = DigitalInOut(board.ESP_CS)

esp32_ready = DigitalInOut(board.ESP_BUSY)

esp32_reset = DigitalInOut(board.ESP_RESET)

# If you have an externally connected ESP32:

# esp32_cs = DigitalInOut(board.D9)

# esp32_ready = DigitalInOut(board.D10)

# esp32_reset = DigitalInOut(board.D5)

spi = busio.SPI(board.SCK, board.MOSI, board.MISO)

esp = adafruit_esp32spi.ESP_SPIcontrol(spi, esp32_cs, esp32_ready, esp32_reset)

print(“Connecting to AP.。.”)

while not esp.is_connected:

try:

esp.connect_AP(b‘MY_SSID_NAME’, b‘MY_SSID_PASSWORD’)

except RuntimeError as e:

print(“could not connect to AP, retrying: ”,e)

continue

print(“Connected to”, str(esp.ssid, ‘utf-8’), “ RSSI:”, esp.rssi)

# Initialize a requests object with a socket and esp32spi interface

requests.set_socket(socket, esp)。我們還將將來自服務器的響應保存到名為import board

import busio

from digitalio import DigitalInOut

import adafruit_esp32spi.adafruit_esp32spi_socket as socket

from adafruit_esp32spi import adafruit_esp32spi

import adafruit_requests as requests

# If you are using a board with pre-defined ESP32 Pins:

esp32_cs = DigitalInOut(board.ESP_CS)

esp32_ready = DigitalInOut(board.ESP_BUSY)

esp32_reset = DigitalInOut(board.ESP_RESET)

# If you have an externally connected ESP32:

# esp32_cs = DigitalInOut(board.D9)

# esp32_ready = DigitalInOut(board.D10)

# esp32_reset = DigitalInOut(board.D5)

spi = busio.SPI(board.SCK, board.MOSI, board.MISO)

esp = adafruit_esp32spi.ESP_SPIcontrol(spi, esp32_cs, esp32_ready, esp32_reset)

print(“Connecting to AP.。.”)

while not esp.is_connected:

try:

esp.connect_AP(b‘MY_SSID_NAME’, b‘MY_SSID_PASSWORD’)

except RuntimeError as e:

print(“could not connect to AP, retrying: ”,e)

continue

print(“Connected to”, str(esp.ssid, ‘utf-8’), “ RSSI:”, esp.rssi)

# Initialize a requests object with a socket and esp32spi interface

requests.set_socket(socket, esp)的變量。

盡管我們從服務器請求數據,但我們還是希望服務器回應。由于我們已經保存了服務器的requests.get(),因此可以將其讀回。對我們來說幸運的是,請求將服務器的響應自動解碼為人類可讀的文本,您可以通過調用response將其讀回。

最后,我們將執行一些操作通過調用response進行清理。這樣會關閉,刪除和收集響應的數據。

下載:文件

復制代碼

response.text response.close()

一些服務器使用文本響應,而某些服務器則使用由屬性-值對組成的json格式的數據進行響應。/p》

CircuitPython_Requests可以將來自服務器的JSON格式的響應轉換為CPython print(“Fetching text from %s”%TEXT_URL)

response = requests.get(TEXT_URL)

print(‘-’*40)

print(“Text Response: ”, response.text)

print(‘-’*40)

response.close()對象。

我們還可以獲取和解析 json 數據。我們將發送HTTP Get到一個我們知道的URL,該URL返回一個json格式的響應(而不是文本數據)。

然后,代碼調用print(“Fetching text from %s”%TEXT_URL)

response = requests.get(TEXT_URL)

print(‘-’*40)

print(“Text Response: ”, response.text)

print(‘-’*40)

response.close()將響應轉換為一個CPython dict.。

下載:文件

復制代碼

response.json() dict

帶有請求的HTTP POST

請求還可以通過調用print(“Fetching JSON data from %s”%JSON_GET_URL)

response = requests.get(JSON_GET_URL)

print(‘-’*40)

print(“JSON Response: ”, response.json())

print(‘-’*40)

response.close()方法(向其傳遞一個print(“Fetching JSON data from %s”%JSON_GET_URL)

response = requests.get(JSON_GET_URL)

print(‘-’*40)

print(“JSON Response: ”, response.json())

print(‘-’*40)

response.close()值)將數據發布到服務器。

下載:文件

復制代碼

requests.post data

您還可以通過將data = ‘31F’

print(“POSTing data to {0}: {1}”.format(JSON_POST_URL, data))

response = requests.post(JSON_POST_URL, data=data)

print(‘-’*40)

json_resp = response.json()

# Parse out the ‘data’ key from json_resp dict.

print(“Data received from server:”, json_resp[‘data’])

print(‘-’*40)

response.close()傳遞到data = ‘31F’

print(“POSTing data to {0}: {1}”.format(JSON_POST_URL, data))

response = requests.post(JSON_POST_URL, data=data)

print(‘-’*40)

json_resp = response.json()

# Parse out the ‘data’ key from json_resp dict.

print(“Data received from server:”, json_resp[‘data’])

print(‘-’*40)

response.close()方法中,將json格式的數據發布到服務器。

下載:文件

復制代碼

json_data requests.post

高級請求使用情況

要發送自定義HTTP, aders,將響應解析為原始字節,還是在CircuitPython代碼中處理響應的http狀態代碼?

我們已經編寫了一個示例來顯示下面的請求模塊的高級用法。

下載:項目Zip 或 requests_advanced.py | 在Github上查看

復制代碼

json_data = {“Date” : “July 25, 2019”}

print(“POSTing data to {0}: {1}”.format(JSON_POST_URL, json_data))

response = requests.post(JSON_POST_URL, json=json_data)

print(‘-’*40)

json_resp = response.json()

# Parse out the ‘json’ key from json_resp dict.

print(“JSON Data received from server:”, json_resp[‘json’])

print(‘-’*40)

response.close()

json_data = {“Date” : “July 25, 2019”}

print(“POSTing data to {0}: {1}”.format(JSON_POST_URL, json_data))

response = requests.post(JSON_POST_URL, json=json_data)

print(‘-’*40)

json_resp = response.json()

# Parse out the ‘json’ key from json_resp dict.

print(“JSON Data received from server:”, json_resp[‘json’])

print(‘-’*40)

response.close()

WiFi Manager

這個最簡單的示例可行,但有點挑剔-您需要不斷檢查WiFi狀態,并具有許多循環來管理連接和斷開連接。對于更高級的用途,我們建議使用WiFiManager對象。它將為您包裝連接/狀態/請求循環-如果WiFi掉線,則重新連接,如果ESP32進入不良狀態,則重置ESP32,等等。

這是一個更高級的示例,其中顯示了WiFi管理器以及如何使用一些額外的標題發布數據:

下載:Project Zip 或 esp32spi_aio_post.py | 在Github上查看

復制代碼

import board

import busio

from digitalio import DigitalInOut

import adafruit_esp32spi.adafruit_esp32spi_socket as socket

from adafruit_esp32spi import adafruit_esp32spi

import adafruit_requests as requests

# If you are using a board with pre-defined ESP32 Pins:

esp32_cs = DigitalInOut(board.ESP_CS)

esp32_ready = DigitalInOut(board.ESP_BUSY)

esp32_reset = DigitalInOut(board.ESP_RESET)

# If you have an externally connected ESP32:

# esp32_cs = DigitalInOut(board.D9)

# esp32_ready = DigitalInOut(board.D10)

# esp32_reset = DigitalInOut(board.D5)

spi = busio.SPI(board.SCK, board.MOSI, board.MISO)

esp = adafruit_esp32spi.ESP_SPIcontrol(spi, esp32_cs, esp32_ready, esp32_reset)

print(“Connecting to AP.。.”)

while not esp.is_connected:

try:

esp.connect_AP(b‘MY_SSID_NAME’, b‘MY_SSID_PASSWORD’)

except RuntimeError as e:

print(“could not connect to AP, retrying: ”,e)

continue

print(“Connected to”, str(esp.ssid, ‘utf-8’), “ RSSI:”, esp.rssi)

# Initialize a requests object with a socket and esp32spi interface

requests.set_socket(socket, esp)

JSON_GET_URL = “http://httpbin.org/get”

# Define a custom header as a dict.

headers = {“user-agent” : “blinka/1.0.0”}

print(“Fetching JSON data from %s.。.”%JSON_GET_URL)

response = requests.get(JSON_GET_URL, headers=headers)

print(‘-’*60)

json_data = response.json()

headers = json_data[‘headers’]

print(“Response‘s Custom User-Agent Header: {0}”.format(headers[’User-Agent‘]))

print(’-‘*60)

# Read Response’s HTTP status code

print(“Response HTTP Status Code: ”, response.status_code)

print(‘-’*60)

# Read Response, as raw bytes instead of pretty text

print(“Raw Response: ”, response.content)

# Close, delete and collect the response data

response.close()

import board

import busio

from digitalio import DigitalInOut

import adafruit_esp32spi.adafruit_esp32spi_socket as socket

from adafruit_esp32spi import adafruit_esp32spi

import adafruit_requests as requests

# If you are using a board with pre-defined ESP32 Pins:

esp32_cs = DigitalInOut(board.ESP_CS)

esp32_ready = DigitalInOut(board.ESP_BUSY)

esp32_reset = DigitalInOut(board.ESP_RESET)

# If you have an externally connected ESP32:

# esp32_cs = DigitalInOut(board.D9)

# esp32_ready = DigitalInOut(board.D10)

# esp32_reset = DigitalInOut(board.D5)

spi = busio.SPI(board.SCK, board.MOSI, board.MISO)

esp = adafruit_esp32spi.ESP_SPIcontrol(spi, esp32_cs, esp32_ready, esp32_reset)

print(“Connecting to AP.。.”)

while not esp.is_connected:

try:

esp.connect_AP(b‘MY_SSID_NAME’, b‘MY_SSID_PASSWORD’)

except RuntimeError as e:

print(“could not connect to AP, retrying: ”,e)

continue

print(“Connected to”, str(esp.ssid, ‘utf-8’), “ RSSI:”, esp.rssi)

# Initialize a requests object with a socket and esp32spi interface

requests.set_socket(socket, esp)

JSON_GET_URL = “http://httpbin.org/get”

# Define a custom header as a dict.

headers = {“user-agent” : “blinka/1.0.0”}

print(“Fetching JSON data from %s.。.”%JSON_GET_URL)

response = requests.get(JSON_GET_URL, headers=headers)

print(‘-’*60)

json_data = response.json()

headers = json_data[‘headers’]

print(“Response‘s Custom User-Agent Header: {0}”.format(headers[’User-Agent‘]))

print(’-‘*60)

# Read Response’s HTTP status code

print(“Response HTTP Status Code: ”, response.status_code)

print(‘-’*60)

# Read Response, as raw bytes instead of pretty text

print(“Raw Response: ”, response.content)

# Close, delete and collect the response data

response.close()

您會在這里注意到,我們使用secrets.py文件來管理我們的SSID信息。 wifimanager被賦予了ESP32對象,密碼和一個用于指示狀態的新像素。

請注意,您需要在密碼文件中添加一些其他信息,以便代碼可以查詢Adafruit IO API:

import time

import board

import busio

from digitalio import DigitalInOut

import neopixel

from adafruit_esp32spi import adafruit_esp32spi

from adafruit_esp32spi import adafruit_esp32spi_wifimanager

print(“ESP32 SPI webclient test”)

# Get wifi details and more from a secrets.py file

try:

from secrets import secrets

except ImportError:

print(“WiFi secrets are kept in secrets.py, please add them there!”)

raise

# If you are using a board with pre-defined ESP32 Pins:

esp32_cs = DigitalInOut(board.ESP_CS)

esp32_ready = DigitalInOut(board.ESP_BUSY)

esp32_reset = DigitalInOut(board.ESP_RESET)

# If you have an externally connected ESP32:

# esp32_cs = DigitalInOut(board.D9)

# esp32_ready = DigitalInOut(board.D10)

# esp32_reset = DigitalInOut(board.D5)

spi = busio.SPI(board.SCK, board.MOSI, board.MISO)

esp = adafruit_esp32spi.ESP_SPIcontrol(spi, esp32_cs, esp32_ready, esp32_reset)

“”“Use below for Most Boards”“”

status_light = neopixel.NeoPixel(board.NEOPIXEL, 1, brightness=0.2) # Uncomment for Most Boards

“”“Uncomment below for ItsyBitsy M4”“”

# status_light = dotstar.DotStar(board.APA102_SCK, board.APA102_MOSI, 1, brightness=0.2)

# Uncomment below for an externally defined RGB LED

# import adafruit_rgbled

# from adafruit_esp32spi import PWMOut

# RED_LED = PWMOut.PWMOut(esp, 26)

# GREEN_LED = PWMOut.PWMOut(esp, 27)

# BLUE_LED = PWMOut.PWMOut(esp, 25)

# status_light = adafruit_rgbled.RGBLED(RED_LED, BLUE_LED, GREEN_LED)

wifi = adafruit_esp32spi_wifimanager.ESPSPI_WiFiManager(esp, secrets, status_light)

counter = 0

while True:

try:

print(“Posting data.。.”, end=‘’)

data = counter

feed = ‘test’

payload = {‘value’:data}

response = wifi.post(

“https://io.adafruit.com/api/v2/”+secrets[‘aio_username’]+“/feeds/”+feed+“/data”,

json=payload,

headers={“X-AIO-KEY”:secrets[‘aio_key’]})

print(response.json())

response.close()

counter = counter + 1

print(“OK”)

except (ValueError, RuntimeError) as e:

print(“Failed to get data, retrying ”, e)

wifi.reset()

continue

response = None

time.sleep(15)

import time

import board

import busio

from digitalio import DigitalInOut

import neopixel

from adafruit_esp32spi import adafruit_esp32spi

from adafruit_esp32spi import adafruit_esp32spi_wifimanager

print(“ESP32 SPI webclient test”)

# Get wifi details and more from a secrets.py file

try:

from secrets import secrets

except ImportError:

print(“WiFi secrets are kept in secrets.py, please add them there!”)

raise

# If you are using a board with pre-defined ESP32 Pins:

esp32_cs = DigitalInOut(board.ESP_CS)

esp32_ready = DigitalInOut(board.ESP_BUSY)

esp32_reset = DigitalInOut(board.ESP_RESET)

# If you have an externally connected ESP32:

# esp32_cs = DigitalInOut(board.D9)

# esp32_ready = DigitalInOut(board.D10)

# esp32_reset = DigitalInOut(board.D5)

spi = busio.SPI(board.SCK, board.MOSI, board.MISO)

esp = adafruit_esp32spi.ESP_SPIcontrol(spi, esp32_cs, esp32_ready, esp32_reset)

“”“Use below for Most Boards”“”

status_light = neopixel.NeoPixel(board.NEOPIXEL, 1, brightness=0.2) # Uncomment for Most Boards

“”“Uncomment below for ItsyBitsy M4”“”

# status_light = dotstar.DotStar(board.APA102_SCK, board.APA102_MOSI, 1, brightness=0.2)

# Uncomment below for an externally defined RGB LED

# import adafruit_rgbled

# from adafruit_esp32spi import PWMOut

# RED_LED = PWMOut.PWMOut(esp, 26)

# GREEN_LED = PWMOut.PWMOut(esp, 27)

# BLUE_LED = PWMOut.PWMOut(esp, 25)

# status_light = adafruit_rgbled.RGBLED(RED_LED, BLUE_LED, GREEN_LED)

wifi = adafruit_esp32spi_wifimanager.ESPSPI_WiFiManager(esp, secrets, status_light)

counter = 0

while True:

try:

print(“Posting data.。.”, end=‘’)

data = counter

feed = ‘test’

payload = {‘value’:data}

response = wifi.post(

“https://io.adafruit.com/api/v2/”+secrets[‘aio_username’]+“/feeds/”+feed+“/data”,

json=payload,

headers={“X-AIO-KEY”:secrets[‘aio_key’]})

print(response.json())

response.close()

counter = counter + 1

print(“OK”)

except (ValueError, RuntimeError) as e:

print(“Failed to get data, retrying ”, e)

wifi.reset()

continue

response = None

time.sleep(15)

您可以轉到adafruit.io查看AIO密鑰鏈接獲取這兩個值并將它們添加到secrets文件中,該文件現在看起來像這樣:

下載:文件

復制代碼

aio_username aio_key

下一步,設置一個名為Adafruit IO提要# This file is where you keep secret settings, passwords, and tokens!

# If you put them in the code you risk committing that info or sharing it

secrets = {

‘ssid’ : ‘_your_ssid_’,

‘password’ : ‘_your_wifi_password_’,

‘timezone’ : “America/Los_Angeles”, # http://worldtimeapi.org/timezones

‘aio_username’ : ‘_your_aio_username_’,

‘aio_key’ : ‘_your_aio_key_’,

}

如果您不知道如何設置供稿,請遵循此頁面并在設置名為。

然后,我們可以有一個簡單的循環,用于將數據發布到Adafruit IO,而無需處理連接或初始化硬件

在Adafruit.io上查看您的測試數據,每次Cir時,您都會看到該值增加cuitPython板向其發布數據!

代碼PyPortal NASA圖像查看器

NASA Open API密鑰

我們將使用NASA API進行查詢并檢索當天的圖片。為此,您需要在 api.nasa.org 注冊一個免費帳戶并獲取您的API密鑰。

這很容易做到,只需轉到此鏈接,然后輸入您的姓名和電子郵件地址。這里的所有都是它的!您的API密鑰將生成并通過電子郵件發送給您,并立即顯示在瀏覽器中。保持該鍵(或包含它的電子郵件)方便,我們需要稍后將其復制并粘貼到我們的代碼中。

Adafruit IO時間服務器

為了使用Adafruit圖像轉換器,該項目將要求您擁有Adafruit IO用戶名和密鑰。 Adafruit IO是絕對免費的,但是您需要使用Adafruit帳戶登錄才能使用它。如果您還沒有Adafruit登錄名,請在此處創建一個登錄名。

如果您以前從未使用過Adafruit IO,請查看本指南以獲取更多信息。

登錄到您的帳戶后,您需要在 secrets.py 文件中放置以下兩項信息: Adafruit IO用戶名和 Adafruit IO鍵。前往io.adafruit.com,只需點擊Adafruit IO頁面左側的查看AIO密鑰鏈接即可獲取此信息。

然后將它們添加到 secrets.py 文件,例如:

下載:文件

復制代碼

secrets = {

‘ssid’ : ‘your_wifi_ssid’,

‘password : ’your_wifi_password‘,

’aio_username‘ : ’your_aio_username‘,

’aio_key‘ : ’your_big_huge_super_long_aio_key‘

} secrets = {

’ssid‘ : ’your_wifi_ssid‘,

’password : ‘your_wifi_password’,

‘aio_username’ : ‘your_aio_username’,

‘aio_key’ : ‘your_big_huge_super_long_aio_key’

}

添加CircuitPython代碼和資產

在下面的嵌入式代碼元素中,單擊下載:項目Zip 鏈接,然后保存.zip存檔文件。

然后解壓縮.zip文件,它將解壓縮到名為 PyPortal_NASA 的文件夾中。

復制 PyPortal_NASA 目錄到PyPortal的 CIRCUITPY 驅動器,然后確保將 nasa.py 文件重命名為 code.py ,當PyPortal重新啟動時,它將自動運行。

編輯代碼

您可以使用任何喜歡的文本編輯器來編輯 code.py 文件。 Adafruit建議安裝免費的Mu Python編輯器,因為它超級方便,可以識別Adafruit板,并具有內置的串行監視器/REPL以與板交互。在此處了解有關Mu的更多信息。

添加NASA API密鑰

在Mu中打開 code.py ,然后從我們之前獲得的NASA復制并粘貼您的API密鑰到DATA_SOURCE網址中,

該行應如下所示:

DEMO_KEY

完成后,再次將 code.py 文件保存到PyPortal的 CIRCUITPY 驅動器中。

boot.py

我們正在使用一個特殊文件來確保.bmp緩存寫入正確閃爍。這是您復制到驅動器的 unsafe_boot.py 文件。現在將其重命名為 boot.py 。

請注意,重啟后會出現這種看上去很恐怖的文字,請放心,這應該是就是這么說!

****************警告******************

將文件系統用作可寫緩存!

這是冒險行為,請備份文件!

** **************警告******************

這是 CIRCUITPY 驅動器的最終內容,如下所示:

下載:Project Zip 或 nasa.py | 在Github上查看

復制代碼

DATA_SOURCE = “https://api.nasa.gov/planetary/apod?api_key=your_actual_really_long_key_here” import time

import board

from adafruit_pyportal import PyPortal

# Set up where we‘ll be fetching data from

DATA_SOURCE = “https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY”

# There’s a few different places we look for data in the photo of the day

IMAGE_LOCATION = [“url”]

TITLE_LOCATION = [“title”]

DATE_LOCATION = [“date”]

# the current working directory (where this file is)

cwd = (“/”+__file__).rsplit(‘/’, 1)[0]

pyportal = PyPortal(url=DATA_SOURCE,

json_path=(TITLE_LOCATION, DATE_LOCATION),

status_neopixel=board.NEOPIXEL,

default_bg=cwd+“/nasa_background.bmp”,

text_font=cwd+“/fonts/Arial-12.bdf”,

text_position=((5, 220), (5, 200)),

text_color=(0xFFFFFF, 0xFFFFFF),

text_maxlen=(50, 50), # cut off characters

image_json_path=IMAGE_LOCATION,

image_resize=(320, 240),

image_position=(0, 0))

while True:

response = None

try:

response = pyportal.fetch()

print(“Response is”, response)

except RuntimeError as e:

print(“Some error occured, retrying! -”, e)

time.sleep(30*60) # 30 minutes till next check

如果遇到任何錯誤,例如“ ImportError:沒有名為` adafruit_display_text.label`”,請務必將您的庫更新到最新ST發布包!

工作原理

NASA Image Viewer正在使用CircuitPython和PyPortal做一些很酷的事情:

背景閃屏

首先,我們將顯示帶有NASA徽標的初始屏幕。這是 .bmp 格式的320x240像素RGB 16位光柵圖形。

字體

我們將圖像標題和今天的日期顯示為使用位圖字體創建的文本加載后疊加在背景圖片上。這里使用的字體是由斜Arial字體制成的位圖字體。您可以在本指南中了解有關轉換類型的更多信息。

JSON

為了檢索當天的NASA天文學圖片(APOD),我們

向NASA API進行查詢。

在添加了API密鑰的APOD服務器請求中,您將獲得一個JSON文件作為響應。

實際上,您可以運行與PyPortal相同的查詢來查看結果。將此鏈接import time

import board

from adafruit_pyportal import PyPortal

# Set up where we‘ll be fetching data from

DATA_SOURCE = “https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY”

# There’s a few different places we look for data in the photo of the day

IMAGE_LOCATION = [“url”]

TITLE_LOCATION = [“title”]

DATE_LOCATION = [“date”]

# the current working directory (where this file is)

cwd = (“/”+__file__).rsplit(‘/’, 1)[0]

pyportal = PyPortal(url=DATA_SOURCE,

json_path=(TITLE_LOCATION, DATE_LOCATION),

status_neopixel=board.NEOPIXEL,

default_bg=cwd+“/nasa_background.bmp”,

text_font=cwd+“/fonts/Arial-12.bdf”,

text_position=((5, 220), (5, 200)),

text_color=(0xFFFFFF, 0xFFFFFF),

text_maxlen=(50, 50), # cut off characters

image_json_path=IMAGE_LOCATION,

image_resize=(320, 240),

image_position=(0, 0))

while True:

response = None

try:

response = pyportal.fetch()

print(“Response is”, response)

except RuntimeError as e:

print(“Some error occured, retrying! -”, e)

time.sleep(30*60) # 30 minutes till next check

復制并粘貼到您的瀏覽器中,除了將DEMO_KEY替換為NASA在注冊電子郵件中發送的自己的API密鑰。

當您在在網絡瀏覽器中,您將看到如下返回結果:

下載:文件

復制代碼

https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY {

“copyright”: “Mario Zauner”,

“date”: “2019-04-03”,

“explanation”: “The famous Horsehead Nebula in Orion is not alone. A deep exposure shows that the dark familiar shaped indentation, visible just below center, is part of a vast complex of absorbing dust and glowing gas. To bring out details of the Horsehead‘s pasture, an amateur astronomer used a backyard telescope in Austria to accumulate and artistically combine 7.5 hours of images in the light of Hydrogen (red), Oxygen (green), and Sulfur (blue)。 The resulting spectacular picture details an intricate tapestry of gaseous wisps and dust-laden filaments that were created and sculpted over eons by stellar winds and ancient supernovas. The Flame Nebula is visible just to the left of the Horsehead, while the bright star on the upper left is Alnilam, the central star in Orion’s Belt. The Horsehead Nebula lies 1,500 light years distant towards the constellation of Orion. Bounce around the Universe: Random APOD Generator”,

“hdurl”: “https://apod.nasa.gov/apod/image/1904/HorseheadFlame_Zauner_4404.jpg”,

“media_type”: “image”,

“service_version”: “v1”,

“title”: “Wisps Surrounding the Horsehead Nebula”,

“url”: “https://apod.nasa.gov/apod/image/1904/HorseheadFlame_Zauner_960.jpg”

}

該結果是一個JSON(JavaScript對象表示法)數組。它由具有七個 key:value 對的單個元素組成。例如,有一個名為{

“copyright”: “Mario Zauner”,

“date”: “2019-04-03”,

“explanation”: “The famous Horsehead Nebula in Orion is not alone. A deep exposure shows that the dark familiar shaped indentation, visible just below center, is part of a vast complex of absorbing dust and glowing gas. To bring out details of the Horsehead‘s pasture, an amateur astronomer used a backyard telescope in Austria to accumulate and artistically combine 7.5 hours of images in the light of Hydrogen (red), Oxygen (green), and Sulfur (blue)。 The resulting spectacular picture details an intricate tapestry of gaseous wisps and dust-laden filaments that were created and sculpted over eons by stellar winds and ancient supernovas. The Flame Nebula is visible just to the left of the Horsehead, while the bright star on the upper left is Alnilam, the central star in Orion’s Belt. The Horsehead Nebula lies 1,500 light years distant towards the constellation of Orion. Bounce around the Universe: Random APOD Generator”,

“hdurl”: “https://apod.nasa.gov/apod/image/1904/HorseheadFlame_Zauner_4404.jpg”,

“media_type”: “image”,

“service_version”: “v1”,

“title”: “Wisps Surrounding the Horsehead Nebula”,

“url”: “https://apod.nasa.gov/apod/image/1904/HorseheadFlame_Zauner_960.jpg”

}的鍵,它的值為date,表示方式如下:

2019-04-03

我們關心的另一個是“date”: “2019-04-03” 鍵,其值為title

表示為:

Wisps Surrounding the Horsehead Nebula

我們真正關心的另一個鍵是“title”: “Wisps Surrounding the Horsehead Nebula”具有圖像位置的值:

url

由于此JSON對象數組具有一致的返回結果的方式對我們來說,我們在PyPortal上運行的代碼可以輕松解析數據并將其顯示!

這是Firefox的“代碼美化器”中JSON文件的外觀。

您可以在 code.py 的此部分中了解其操作方式:

下載:文件

復制代碼

“url”: “https://apod.nasa.gov/apod/image/1904/HorseheadFlame_Zauner_960.jpg” DATA_SOURCE = “https://api.nasa.gov/planetary/apod?api_key=xxxxxxx” #put your api key here

IMAGE_LOCATION = [“url”]

TITLE_LOCATION = [“title”]

DATE_LOCATION = [“date”]

然后,在DATA_SOURCE = “https://api.nasa.gov/planetary/apod?api_key=xxxxxxx” #put your api key here

IMAGE_LOCATION = [“url”]

TITLE_LOCATION = [“title”]

DATE_LOCATION = [“date”]查詢,我們要求從該URL中獲取日期和 title 名稱,然后使用pyportal參數設置text_ ,font,position,color和wrap文本顯示時。

我們使用 url 名稱以獲取.jpeg圖像文件的路徑。

下載:文件

復制代碼

maxlen pyportal = PyPortal(url=DATA_SOURCE,

json_path=(TITLE_LOCATION, DATE_LOCATION),

status_neopixel=board.NEOPIXEL,

default_bg=cwd+“/nasa_background.bmp”,

text_font=cwd+“/fonts/Arial-12.bdf”,

text_position=((5, 220), (5, 200)),

text_color=(0xFFFFFF, 0xFFFFFF),

text_maxlen=(50, 50), # cut off characters

image_json_path=IMAGE_LOCATION,

image_resize=(320, 240),

image_position=(0, 0))

所有這些都準備好了,在pyportal = PyPortal(url=DATA_SOURCE,

json_path=(TITLE_LOCATION, DATE_LOCATION),

status_neopixel=board.NEOPIXEL,

default_bg=cwd+“/nasa_background.bmp”,

text_font=cwd+“/fonts/Arial-12.bdf”,

text_position=((5, 220), (5, 200)),

text_color=(0xFFFFFF, 0xFFFFFF),

text_maxlen=(50, 50), # cut off characters

image_json_path=IMAGE_LOCATION,

image_resize=(320, 240),

image_position=(0, 0))的主循環中,代碼將查詢

當獲取.jpeg文件的路徑時,pyportal庫將其傳遞到Adafruit IO圖像轉換器服務器,在該服務器中文件被轉換為PyPortal可以使用的格式顯示屏,一個320x240像素RGB 16位.bmp。

原始jpeg

轉換并調整大小的bmp

此圖像然后將e緩存到PyPortal的存儲中并顯示在PyPortal TFT屏幕上。

最后,文本將顯示在圖像上。

此更新每三十分鐘。請注意,您每天對NASA API的查詢不能超過50個!

責任編輯:wv

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 編碼
    +關注

    關注

    6

    文章

    935

    瀏覽量

    54765
收藏 人收藏

    評論

    相關推薦

    KiCad發現之旅(三)PCB 3D查看器

    “ ?本文轉載自KiCad官網,通過幾個簡短的視頻,幫助大家快速了解KiCad的基礎功能。如需了解更多關于KiCad的咨詢,請參考: KiCad常用資源? ” 利用KiCad的集成3D查看器以3D
    的頭像 發表于 11-12 12:23 ?232次閱讀
    KiCad發現之旅(三)PCB 3D<b class='flag-5'>查看器</b>

    KiCad發現之旅(四)Gerber查看器

    “ ?本文轉載自KiCad官網,通過幾個簡短的視頻,幫助大家快速了解KiCad的基礎功能。如需了解更多關于KiCad的資訊,請參考: KiCad常用資源? ” Gerber查看器可以幫助您在發送到板
    的頭像 發表于 11-12 12:23 ?211次閱讀
    KiCad發現之旅(四)Gerber<b class='flag-5'>查看器</b>

    自己html網站如何嵌入DigiPCBA 查看器

    官網給的DigiPCBA 查看器嵌入自己的網站代碼有欠缺,請問大佬們,如何把DigiPCBA 查看器嵌入到自己的網站中,iframe會有跨域問題
    發表于 09-02 16:28

    開源 KiCad/AD 查看器 + AI Copilot?

    先簡單總結下這個項目的主要功能: 這是一個基于 Web 的 EDA 查看器,支持查看 KiCad 和 Altium Designer 的二進制設計圖紙(和 Altium 365 查看器 非常類似
    發表于 08-18 22:41

    安寶特產品 安寶特3D Analyzer:高級 3D CAD 查看器與分析軟件工具

    3D_Analyzer 查看器是完美的工具,它可以獨立地審查和分析所有主流 CAD 原生和標準格式的模型,而不需要原生CAD原生系統軟件。我們的查看器具有獨特的功能和直觀的用戶界面,是當今市場上一流的產品。
    的頭像 發表于 08-06 15:31 ?326次閱讀
    安寶特產品  安寶特3D Analyzer:高級 3D CAD <b class='flag-5'>查看器</b>與分析軟件工具

    基于DSP C6000教學實驗箱_數字圖像處理教程:5-9 圖像反色實驗案例分享

    目錄下的BMP圖像,接著進行反色處理,最后保存圖像。 三、操作現象 本實驗所需硬件實驗板、仿真和電源。 硬件連接 (1)連接仿真
    發表于 07-19 09:57

    DSP教學實驗箱_數字圖像處理_操作教程:5-1 圖像旋轉

    ,接著進行旋轉處理,最后保存旋轉后的圖像。 三、操作現象 本實驗所需硬件實驗板、仿真和電源。 硬件連接 (1)連接仿真和電腦的USB接口, (2)
    發表于 06-14 14:03

    TC397在系統需要時MCU設置睡眠模式遇到的疑問求解

    回 1? 2、請查看下圖,喚醒源代碼登錄后,除主處理外,其他 CPU 保持空閑狀態。 我是否需要通過開關 CPU 與主控分開
    發表于 05-27 08:28

    怎么在網頁上嵌入DigiPCBA查看器

    請問怎么在網頁上嵌入DigiPCBA查看器,要在網頁的<head>部分放入什么代碼?DigiPCBA官網的幫助文檔里有提到,但是沒有相關代碼,有人能提供下嗎
    發表于 04-20 15:20

    Sensor如何mipi端的設置YUv格式?

    我的Sensor輸出是raw8圖像,如何 mipi 端的設置YUv格式,而不是UYVY格式。
    發表于 02-29 08:03

    怎樣查看input/output delay是否生效

    通過get_port命令查看接口。 get_ports * 以LVDS的輸入輸出怎樣查看outputdelay ? set_output_delay -clock
    的頭像 發表于 02-27 08:38 ?641次閱讀
    <b class='flag-5'>怎樣</b><b class='flag-5'>查看</b>input/output delay是否生效

    dns的服務地址設置多少

    DNS(域名系統)是互聯網的基礎設施之一,用于域名轉換為IP地址,使用戶可以訪問網絡資源。要設置DNS服務地址,首先需要理解DNS的工作原理和不同類型的DNS服務。本文
    的頭像 發表于 01-15 11:11 ?1651次閱讀

    adv7401怎樣調整輸出圖像垂直位置,通過哪個寄存

    adv7401怎樣調整輸出圖像垂直位置,通過哪個寄存
    發表于 12-07 07:11

    寄存查看器的功能和使用

    對于搞嵌入式底層開發的軟件或者硬件工程師來說,經常會涉及到查看芯片手冊,比如某個芯片的串口控制的寄存值,需要知道這個值對應寄存的哪些位,微軟計算
    的頭像 發表于 11-28 12:26 ?1857次閱讀
    寄存<b class='flag-5'>器</b><b class='flag-5'>查看器</b>的功能和使用

    UEStudio使用技巧簡析

    使用類查看器UEStudio的類查看器之旅,它提供了項目的解析圖形表示
    的頭像 發表于 11-27 10:42 ?838次閱讀