侵權投訴

球心距公式:PyPortall圖像查看器的使用

39度創意研究所 ? 2019-11-28 10:33 ? 次閱讀

8828彩票的押注公式 www.mjbrhs.com.cn 概述

PyPortall圖像查看器的使用

在PyPortal顯示器上關注Adafruit的最新新功能!

此PyPortal圖像查看器項目使用CircuitPython和ESP32 WiFi協處理器來獲取最新圖像,名稱以及Adafruit的New New最新產品的簡短URL,因此您將始終了解商店中最新,最酷的商品。

零件

AdaBox011-PyPortal

產品ID:4061

借助PyPortal,您可以走到辦公桌外-到達星星和更遠的地方!該ADABOX具有易于使用的新型IoT設備,可讓您自定義和創建。..

缺貨

缺貨

或在下面獲取單獨的零件:

Adafruit PyPortal-由CircuitPython支持的Internet顯示

產品ID:4116

PyPortal,使用物聯網設備,使您可以在幾分鐘之內為“物聯網”創建所有事物。制作自定義觸摸屏界面。..

$ 54.95

進貨

添加到購物車

Adafruit PyPortal桌面支架外殼套件

產品ID:4146

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

$ 9.95

進貨

添加到購物車

粉紅色和紫色編織USB A到Micro B電纜-2一米長

產品ID:4148

該電纜具有粉紅色和紫色編織的類似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進行互聯網訪問使用(您猜對了?。㏒PI傳輸。 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”, # //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”, # //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 = “//wifitest.adafruit.com/testwifi/index.html”

JSON_URL = “//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 = “//wifitest.adafruit.com/testwifi/index.html”

JSON_URL = “//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)?;菇涌諫柚夢?/p>

下載:文件

復制代碼

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 = “//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 = “//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 = “//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 = “//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 = “//wifitest.adafruit.com/testwifi/index.html”

JSON_GET_URL = “//httpbin.org/get”

JSON_POST_URL = “//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 = “//wifitest.adafruit.com/testwifi/index.html”

JSON_GET_URL = “//httpbin.org/get”

JSON_POST_URL = “//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 = “//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 = “//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”, # //worldtimeapi.org/timezones

‘aio_username’ : ‘_your_aio_username_’,

‘aio_key’ : ‘_your_aio_key_’,

}

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

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

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

在CircuitPython中為新的新查看器編碼

Adafruit產品API

與PyPortal上的大多數IoT項目一樣,我們能夠通過REST應用程序編程接口(API)請求的奇妙功能來進行動態數據和圖像收集,該請求會返回一個JSON文件。

Adafruit產品API使我們可以輕松地請求有關產品的基本信息,包括其名稱,產品URL和產品圖片。

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’

}

此時,請確保您的WiFi SSID和密碼也位于 secrets.py中。 。設置時只需執行一次。如果將PyPortal移到其他WiFi服務位置,請使用文本編輯器在此文件中輸入新值。

添加CircuitPython代碼和資產

在下面的嵌入式代碼元素中,單擊下載:Project Zip 鏈接,然后將.zip存檔文件保存到您的計算機。

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

將 PyPortal_NewNewNew 目錄的內容復制到PyPortal的 CIRCUITPY 驅動器中,然后確保將 newnewnew.py 文件重命名為 code.py ,因此它將在PyPortal重新啟動時自動運行。

編輯代碼

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

啟動.py

我們使用一個特殊文件來確保.bmp緩存正確寫入閃存。這是您復制到驅動器的 unsafe_boot.py 文件。現在將其重命名為 boot.py 。然后,按PyPortal上的Reset(重置)按鈕。

請注意,重新啟動過程中會出現這種看上去恐怖的文本,請不要擔心,它應該是這樣說的!

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

使用文件系統作為可寫緩存!

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

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

這是 CIRCUITPY 驅動器的最終內容看起來像:

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

復制代碼

import time

import board

import adafruit_pyportal

# We can cycle through the latest featured products

#PRODUCTS_TYPE = “featured”

#or we can view the latest new products

PRODUCTS_TYPE = “new”

# Set up where we‘ll be fetching data from

DATA_SOURCE = “https://www.adafruit.com/api/products?format=micro&”+PRODUCTS_TYPE+“=1&random=1”

# What data we’ll be viewing

IMAGE_LOCATION = [0, “image”]

NAME_LOCATION = [0, “name”]

URL_LOCATION = [0, “url”]

# determine the current working directory needed so we know where to find files

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

pyportal = adafruit_pyportal.PyPortal(url=DATA_SOURCE,

json_path=(NAME_LOCATION, URL_LOCATION),

status_neopixel=board.NEOPIXEL,

default_bg=cwd+“/new_background.bmp”,

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

text_position=((5, 35), (5, 225)),

text_color=(0xFFFFFF, 0xFFFFFF),

text_wrap=(35, 35), # characters to wrap

image_json_path=IMAGE_LOCATION,

image_resize=(320, 240),

image_position=(0, 0))

pyportal.preload_font()

while True:

response = None

try:

response = pyportal.fetch()

print(“Response is”, response)

except (IndexError, RuntimeError, ValueError) as e:

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

time.sleep(60)

import time

import board

import adafruit_pyportal

# We can cycle through the latest featured products

#PRODUCTS_TYPE = “featured”

#or we can view the latest new products

PRODUCTS_TYPE = “new”

# Set up where we‘ll be fetching data from

DATA_SOURCE = “https://www.adafruit.com/api/products?format=micro&”+PRODUCTS_TYPE+“=1&random=1”

# What data we’ll be viewing

IMAGE_LOCATION = [0, “image”]

NAME_LOCATION = [0, “name”]

URL_LOCATION = [0, “url”]

# determine the current working directory needed so we know where to find files

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

pyportal = adafruit_pyportal.PyPortal(url=DATA_SOURCE,

json_path=(NAME_LOCATION, URL_LOCATION),

status_neopixel=board.NEOPIXEL,

default_bg=cwd+“/new_background.bmp”,

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

text_position=((5, 35), (5, 225)),

text_color=(0xFFFFFF, 0xFFFFFF),

text_wrap=(35, 35), # characters to wrap

image_json_path=IMAGE_LOCATION,

image_resize=(320, 240),

image_position=(0, 0))

pyportal.preload_font()

while True:

response = None

try:

response = pyportal.fetch()

print(“Response is”, response)

except (IndexError, RuntimeError, ValueError) as e:

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

time.sleep(60)

工作方式

“ New New New Product Viewer”的工作方式如下:首先,啟動時,它會按照 secrets.py 文件中指定(并經過身份驗證)的方式連接到您的Wifi接入點。

背景閃屏

下一步,它會顯示 new_background.bmp 圖片文件啟動屏幕。這是 .bmp 格式的320x240像素RGB 16位光柵圖形。

JSON

為了檢索圖像,我們將查詢Adafruit產品API

發出服務器請求時,您將獲得一個返回的JSON文件作為響應。

實際上,您可以運行與PyPortal相同的查詢來看到結果。復制此鏈接https://www.adafruit.com/api/products?format=micro&NEW=1&random=1并將其粘貼到瀏覽器中。

在網絡瀏覽器中輸入該鏈接時,您會看到返回的結果是這樣的(返回的產品是隨機的,因此您可能會看到與此不同的文件):

下載:文件

復制代碼

{

“id”: 3315,

“name”: “TFT FeatherWing - 2.4\” 320x240 Touchscreen For All Feathers“,

”description“: ”A Feather board without ambition is a Feather board without FeatherWings! Spice up your Feather project with a beautiful 2.4\“ touchscreen display shield with built in microSD card socket. This TFT display is 2.4\” diagonal with a bright 4 white-LED backlight. You get 240x320 pixels with individual 16-bit color pixel control. It has way more resolution than a black and white 128x64 display. As a bonus, this display comes with a resistive touchscreen attached to it already, so you can detect f.。.“,

”url“: ”//adafru.it/3315“,

”image“: ”https://cdn-shop.adafruit.com/640x480/3315-03.jpg“

}

] [

{

”id“: 3315,

”name“: ”TFT FeatherWing - 2.4\“ 320x240 Touchscreen For All Feathers”,

“description”: “A Feather board without ambition is a Feather board without FeatherWings! Spice up your Feather project with a beautiful 2.4\” touchscreen display shield with built in microSD card socket. This TFT display is 2.4\“ diagonal with a bright 4 white-LED backlight. You get 240x320 pixels with individual 16-bit color pixel control. It has way more resolution than a black and white 128x64 display. As a bonus, this display comes with a resistive touchscreen attached to it already, so you can detect f.。.”,

“url”: “//adafru.it/3315”,

“image”: “https://cdn-shop.adafruit.com/640x480/3315-03.jpg”

}

結果是一個JSON(JavaScript對象表示法)數組。它由具有五個 key:value 對的單個元素組成。例如,有一個名為name的鍵,它的值為“TFT FeatherWing - 2.4\” 320x240 Touchscreen For All Feathers“

,表示為:

”name“: ”“TFT FeatherWing - 2.4\” 320x240 Touchscreen For All Feathers“”

由于此JSON對象數組具有一致的方式將結果返回給我們,因此我們在PyPortal上運行的代碼可以

image 鍵可以很容易地解析數據并顯示它!值:“https://cdn-shop.adafruit.com/640x480/3315-03.jpg”

以下是該網址上的圖片:

我們還獲得了url 鍵,這是將在屏幕底部顯示的簡短URL,在這種情況下,“//adafru.it/3315”

您可以在 code.py 的這一部分中看到它的完成方式:

下載:文件

復制代碼

DATA_SOURCE = “https://www.adafruit.com/api/products?format=micro&”+PRODUCTS_TYPE+“=1&random=1”

# What data we‘ll be viewing

IMAGE_LOCATION = [0, “image”]

NAME_LOCATION = [0, “name”]

URL_LOCATION = [0, “url”] DATA_SOURCE = “https://www.adafruit.com/api/products?format=micro&”+PRODUCTS_TYPE+“=1&random=1”

# What data we’ll be viewing

IMAGE_LOCATION = [0, “image”]

NAME_LOCATION = [0, “name”]

URL_LOCATION = [0, “url”]

然后,在pyportal查詢中,我們從該URL要求 image 名稱以獲取.jpe的路徑。 g圖片文件,以及 name 和 url 值。

下載:文件

復制代碼

pyportal = adafruit_pyportal.PyPortal(url=DATA_SOURCE,

json_path=(NAME_LOCATION, URL_LOCATION),

status_neopixel=board.NEOPIXEL,

default_bg=cwd+“/new_background.bmp”,

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

text_position=((5, 35), (5, 225)),

text_color=(0xFFFFFF, 0xFFFFFF),

text_wrap=(35, 35), # characters to wrap

image_json_path=IMAGE_LOCATION,

image_resize=(320, 240),

image_position=(0, 0)) pyportal = adafruit_pyportal.PyPortal(url=DATA_SOURCE,

json_path=(NAME_LOCATION, URL_LOCATION),

status_neopixel=board.NEOPIXEL,

default_bg=cwd+“/new_background.bmp”,

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

text_position=((5, 35), (5, 225)),

text_color=(0xFFFFFF, 0xFFFFFF),

text_wrap=(35, 35), # characters to wrap

image_json_path=IMAGE_LOCATION,

image_resize=(320, 240),

image_position=(0, 0))

在while True:的主循環中,代碼將查詢頁面中的JSON數據。

當它獲取.jpeg文件的路徑時,pyportal庫會將其傳遞給Adafruit IO映像轉換器服務器,將文件轉換為PyPortal可以顯示的格式,即320x240像素RGB 16位.bmp。

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

然后,使用指定的字體,顏色和PyPortal構造函數中的位置,在圖像背景的頂部繪制 name 和 url 值的文本。

注意,我們還要指定text_wrap的數量,以便文本不會被截斷。

此消息每分鐘更新一次,因此您的“新新新”保持新新??!
? ? ? ??責任編輯:wv

收藏 人收藏
分享:

評論

相關推薦

IoT風險管理問題怎么樣去解決

這些NDR平臺可監視整個網絡以及連接到網絡的所有端點,企業對這些工具的興趣日益濃厚,因為從IoT監視....
發表于 04-04 00:56 ? 11次 閱讀
IoT風險管理問題怎么樣去解決

意法半導體MCU將IoT功能提升新高度

智慧城市提供的服務越來越多,而用于收費的服務也逐漸增多。隨著城市物聯網(IoT)基礎設施不斷擴展,當....
發表于 04-03 16:03 ? 16次 閱讀
意法半導體MCU將IoT功能提升新高度

周伯文:新基建浪潮下,建設需要超級平臺承上啟下

京東有幾十億的SKU,每天高效的送到用戶手中,背后移動著各種維度的“比特”,而聰明的移動“比特”,可....
的頭像 牽手一起夢 發表于 04-03 15:12 ? 204次 閱讀
周伯文:新基建浪潮下,建設需要超級平臺承上啟下

怎樣可以集成IIoT系統

使用機器學習和自動化技術創建一個能夠準確、一致地捕獲、分析和傳輸數據的虛擬儀表盤系統,用于操作管理。
發表于 04-03 09:41 ? 32次 閱讀
怎樣可以集成IIoT系統

物聯網的雙刃劍是怎樣的

物聯網能夠將設備連接到互聯網并使其相互連接,同時這些設備能夠根據所收集的數據對情況做出響應。
發表于 04-02 16:58 ? 80次 閱讀
物聯網的雙刃劍是怎樣的

物聯網投資回報的核心點在哪里

物聯網的價值源于其解決業務問題的能力,因此首先選擇一個業務問題并開始工作。
發表于 04-02 16:51 ? 148次 閱讀
物聯網投資回報的核心點在哪里

物聯網試點煉獄怎樣去避免出現

對于其他企業來說,他們初次參與物聯網部署并且幾乎沒有什么興趣。
發表于 04-02 16:47 ? 24次 閱讀
物聯網試點煉獄怎樣去避免出現

物聯網追蹤了哪些不尋常的物品

物聯網(IoT)通常與智能家居或車輛相關聯。物聯網的一個引人注目的,或許鮮為人知的用例是資產跟蹤。
發表于 04-02 16:34 ? 29次 閱讀
物聯網追蹤了哪些不尋常的物品

物聯網的效益比安全重要?

消費者無須對物聯網技術產生恐慌,因為有更多的企業正在為了?;び沒荻?。
發表于 04-02 15:59 ? 16次 閱讀
物聯網的效益比安全重要?

物聯網設計要避免出現什么缺陷

在軟件級別 - 物聯網設備的最大攻擊面是設備上運行的軟件以及與之通信的服務器。
發表于 04-02 15:22 ? 25次 閱讀
物聯網設計要避免出現什么缺陷

萬物聯網和物聯網是同一個概念嗎

物聯網(IOT)是一個用來描述日常事物之間相互聯系的術語。而萬物聯網(IOE)是一個更廣泛的術語,它....
發表于 04-02 14:33 ? 24次 閱讀
萬物聯網和物聯網是同一個概念嗎

企業需要面對什么物聯網安全問題

物聯網(IoT)和工業物聯網(IIoT)的興起為企業組織帶來了新的發展機遇,但同時,它們也為企業組織....
發表于 04-01 11:34 ? 33次 閱讀
企業需要面對什么物聯網安全問題

為什么要在工廠中實施物聯網

各種類型的傳感器是大多數物聯網解決方案的核心。在車間安裝傳感器可以實時為工廠管理人員提供有價值的數據....
發表于 04-01 08:42 ? 44次 閱讀
為什么要在工廠中實施物聯網

用戶體驗對于物聯網有多重要

物聯網(IoT)拉近了我們與世界的距離。憑借眾多的智能電器、智能汽車和物聯網可穿戴設備,我們比以往任....
發表于 03-31 16:39 ? 100次 閱讀
用戶體驗對于物聯網有多重要

物聯網與企業會有什么故事發生

物聯網是一個由相互關聯的計算設備、機械和數字機器、物體、動物或人類組成的系統,它們擁有唯一的標識符,....
發表于 03-31 16:29 ? 53次 閱讀
物聯網與企業會有什么故事發生

微分段能為物聯網帶來什么嗎

作為物聯網部署安全策略的一部分,微分段可以實現對網絡系統更加精細的控制,并在利用安全漏洞時實現更好的....
發表于 03-31 16:18 ? 72次 閱讀
微分段能為物聯網帶來什么嗎

云米科技2019全年財報發布:凈利潤2.9億元,同比增長349.6%

財報顯示,云米2019年實現銷售收入46.5億元,同比增長81.5%,凈利潤2.9億元,同比增長34....
的頭像 牽手一起夢 發表于 03-31 15:26 ? 268次 閱讀
云米科技2019全年財報發布:凈利潤2.9億元,同比增長349.6%

如何去?;の锪?/a>

物聯網可以給我們的生活帶來很多好處,但是一些已經存在的安全漏洞仍然會引發問題,并且在沒有適當網絡管理....
發表于 03-31 14:42 ? 57次 閱讀
如何去?;の锪? />    </a>
</div><div class=

智能工廠面臨怎樣的挑戰

隨著邊緣數據,連接性和處理能力的不斷增長,工業物聯網(IIoT)變得越來越容易訪問。
發表于 03-31 13:48 ? 92次 閱讀
智能工廠面臨怎樣的挑戰

迎接5G IOT需要準備什么

隨著5G的承諾繼續推動物聯網的大規模增長,企業必須建立系統來支持所有這些連接設備創建的數據。
發表于 03-31 13:44 ? 34次 閱讀
迎接5G IOT需要準備什么

物聯網在醫療保健上存在怎樣的利弊

物聯網(IoT)在生活的各個領域(尤其是醫療保健系統)都迅速得到普及。 簡而言之,聯網聯網技術就是允....
發表于 03-30 14:51 ? 197次 閱讀
物聯網在醫療保健上存在怎樣的利弊

哪一些物聯網API比較受歡迎

物聯網(IoT)技術的應用使得我們的房屋、城市、汽車、企業和工作場所變得越來越智能。
發表于 03-30 14:47 ? 86次 閱讀
哪一些物聯網API比較受歡迎

NB-IOT之硬件工程師需要了解的

作為技術人員,物聯網時代,無論是否是在該行業,基本知識都應多少掌握些,下面分享下NB-IoT的一些基....
發表于 03-30 09:13 ? 53次 閱讀
NB-IOT之硬件工程師需要了解的

我們應該如何解決物聯網的安全問題

“來往“IoT設備”的流量將通過Cloudflare的全球網絡。
發表于 03-29 19:54 ? 21次 閱讀
我們應該如何解決物聯網的安全問題

工業物聯網最常見的錯誤如何避免出現

這些能夠為有針對性的細分市場、更有吸引力的客戶體驗、更高的客戶生命周期價值和更有價值的客戶成果提供基....
發表于 03-27 15:34 ? 35次 閱讀
工業物聯網最常見的錯誤如何避免出現

完整的工業物聯網需要哪一些因素

在工業應用,組件產品或是系統必須要能有一定的堅固耐用性,與有一定的質量和可靠度,而這些可透過產品是否....
發表于 03-27 15:17 ? 41次 閱讀
完整的工業物聯網需要哪一些因素

物聯網技術讓制造業有了怎樣的改變

利用IoT技術實時收集銷售軸承的情報后,NTN就能在預測軸承應維修之前通知用戶,讓用戶排定時間進行維....
發表于 03-27 15:11 ? 49次 閱讀
物聯網技術讓制造業有了怎樣的改變

智能家居使用IoTwebOS:物聯網與瀏覽器的完美結合!

智能家居近幾年在中國爆發,各類智能家居產品層出不窮,如此快速發展,也是得益于近年來云計算、移動互聯、....
發表于 03-27 11:31 ? 23次 閱讀
智能家居使用IoTwebOS:物聯網與瀏覽器的完美結合!

開發物聯網設備問題多?“一個大招”解決系列難題!

物聯網時代,各類物聯網需求越來越迫切。物聯網設備呈現出爆發式增長。同時近年來國家不斷出臺相關的法規政....
發表于 03-27 11:30 ? 47次 閱讀
開發物聯網設備問題多?“一個大招”解決系列難題!

為什么工程師的“桌面伴侶”需要一場革命?

工欲善其事必先利其器,工程師需要精準、快速地追蹤和捕獲電子世界的復雜變化,相伴案頭的示波器需要一場從....
發表于 03-27 08:30 ? 684次 閱讀
為什么工程師的“桌面伴侶”需要一場革命?

什么原因可能導致物聯網項目的失敗

物聯網(IoT)正被廣泛用于實現企業效率和效益的新功能。
發表于 03-26 15:57 ? 102次 閱讀
什么原因可能導致物聯網項目的失敗

物聯網的實用加密方法有哪一些

物聯網( IoT )開始變得聲名不佳——我們幾乎每天都能聽到又有一種不安全的物聯網設備被另外一種方式....
發表于 03-26 15:05 ? 70次 閱讀
物聯網的實用加密方法有哪一些

物聯網是什么問題的答案

在開始物聯網旅程之前,不要只關注工具(IoT),而是要明確目的地,并展望當你到達目的地時成功應該是一....
發表于 03-26 14:33 ? 58次 閱讀
物聯網是什么問題的答案

企業現在考慮物聯網的理由是什么

通過使用物聯網連接工具,您可以使您的團隊比以往任何時候都更緊密地聯系在一起。
發表于 03-26 09:04 ? 35次 閱讀
企業現在考慮物聯網的理由是什么

可以使用什么辦法來?;OT設備

物聯網(IoT)設備使我們的生活更加高效和便捷。它們使我們能夠從遠處監視房屋,控制燈光,恒溫器和鎖,....
發表于 03-26 09:01 ? 41次 閱讀
可以使用什么辦法來?;OT設備

終端設備邊緣AI有助于解決云服務安全問題

智能手機和移動設備的激增讓我們的社會受益匪淺,這些智能設備的存在豐富并簡化了我們的生活。智能設備以及....
的頭像 牽手一起夢 發表于 03-25 16:28 ? 550次 閱讀
終端設備邊緣AI有助于解決云服務安全問題

物聯網誕生的背景是什么

主要是當今世界各種前沿科技層出不窮,形成了人工智能、大數據、區塊鏈、虛擬現實等新興技術相互疊加的科技....
發表于 03-25 16:07 ? 60次 閱讀
物聯網誕生的背景是什么

阿里云宣布IoT安全平臺將提供最全面的loT安全防護 可大幅縮減自生安全防護成本

3月24日,阿里云宣布IoT安全平臺成為全國首個通過網絡安全等級?;?.0(以下簡稱等保2.0)物聯....
發表于 03-25 14:30 ? 803次 閱讀
阿里云宣布IoT安全平臺將提供最全面的loT安全防護 可大幅縮減自生安全防護成本

物聯網給網絡工程師,規劃人員帶來的挑戰

網絡主管看到物聯網和SDN之間的緊密聯系。原因很簡單,SDN的核心是將數據有效負載與控制這些消息到達....
的頭像 倩倩 發表于 03-25 13:51 ? 202次 閱讀
物聯網給網絡工程師,規劃人員帶來的挑戰

網絡安全:千億藍???/a>

網絡安全已經成為網絡、計算、存儲外的第四大IT基礎設施,全球網安產業規模達千億美元量級。
發表于 03-25 12:33 ? 474次 閱讀
網絡安全:千億藍??? />    </a>
</div><div class=

PIC16F獲取有關錯誤的信息

大家好,我有一個基于PIC16F18345的IOT GSM系統,每隔2或3次安裝一次bug。我想建立一個小的報告工具來找出這個bug發生...
發表于 03-25 07:51 ? 32次 閱讀
PIC16F獲取有關錯誤的信息

阿里云宣布IoT安全平臺通過等保2.0評估,極大縮減自生安全防護成本

3月24日,阿里云宣布IoT安全平臺成為全國首個通過網絡安全等級?;?.0(以下簡稱等保2.0)物聯....
的頭像 牽手一起夢 發表于 03-24 17:20 ? 860次 閱讀
阿里云宣布IoT安全平臺通過等保2.0評估,極大縮減自生安全防護成本

微分段能為物聯網做一些什么

作為物聯網部署安全策略的一部分,微分段可以實現對網絡系統更加精細的控制,并在利用安全漏洞時實現更好的....
發表于 03-23 15:48 ? 41次 閱讀
微分段能為物聯網做一些什么

傳感器對物聯網有多重要

在物聯網(IoT)生態系統中,有兩點非常重要:互聯網以及諸如傳感器和執行器之類的物理設備。
發表于 03-23 15:30 ? 65次 閱讀
傳感器對物聯網有多重要

物聯網如何來確保兒童的安全

IoT (物聯網)設備正在迅速改變我們的生活。這些設備無處不在,從我們的家庭到其它行業。
發表于 03-23 15:08 ? 151次 閱讀
物聯網如何來確保兒童的安全

以后龐大的物聯網設備數量如何來管理

物聯網將智能機器、可穿戴設備、智能汽車等物理實體連接在幾乎所有環境中,并提供無數激動人心的智能應用,....
發表于 03-23 14:47 ? 57次 閱讀
以后龐大的物聯網設備數量如何來管理

你真的了解工業物聯網嗎

IIoT是指工業物聯網。廣泛地說,它是將儀表和傳感器及其他設備應用于運輸、能源和工業領域的機械和車輛....
發表于 03-23 14:32 ? 73次 閱讀
你真的了解工業物聯網嗎

AR+IoT究竟能為制造業帶來什么?

喜來源于,數據時代,數據越多,我們就能借助數據的力量對業務、工廠都精細化運營,并且降低成本,提升效益....
的頭像 倩倩 發表于 03-23 10:15 ? 328次 閱讀
AR+IoT究竟能為制造業帶來什么?

關于不需要無線電的無線連接技術

目前,WiFi、3G/4G蜂窩網絡和相關技術在各個領域都被應用的很好,我們每個人以及日益增加的物聯網....
發表于 03-23 09:49 ? 85次 閱讀
關于不需要無線電的無線連接技術

2024年全球IIoT支出年復合成長率將達40%

 IoT Analytics發現制造業在工業物聯網(IIoT)平臺的支出全球市場占比最大,基于計量經....
發表于 03-22 16:01 ? 170次 閱讀
2024年全球IIoT支出年復合成長率將達40%

物聯網的七大通信協議你都了解嗎

在物聯網協議中,一般分為兩大類,一類是傳輸協議,一類是通信協議。
發表于 03-21 21:22 ? 205次 閱讀
物聯網的七大通信協議你都了解嗎

玩轉IOT設計,ST首顆MPU在MQTT和IEC61850上的應用參考

前言:在萬物互聯快速發展的趨勢下,板卡處理器性能、內存大小、接口外設等都是人們非常關心的硬件參數,但是如何讓硬件的作用...
發表于 03-06 11:51 ? 2849次 閱讀
玩轉IOT設計,ST首顆MPU在MQTT和IEC61850上的應用參考

走進MEasy的世界:基于STM32MP1的IOT參考設計

走進MEasy的世界:基于STM32MP1的IOT參考設計 在萬物互聯快速發展的趨勢下,板卡處理器性能、內存大小、接口外設等都是...
發表于 02-24 15:46 ? 2088次 閱讀
走進MEasy的世界:基于STM32MP1的IOT參考設計

小熊派華為物聯網操作系統LiteOS內核教程06-內存管理

1. LiteOS內核的內存管理 1.1. 內存管理 在系統運行的過程中,一些內存空間大小是不確定的,比如一些數據緩沖區,所以系...
發表于 01-19 11:03 ? 1048次 閱讀
小熊派華為物聯網操作系統LiteOS內核教程06-內存管理

小熊派華為物聯網操作系統LiteOS內核教程05-互斥鎖

1. LiteOS的互斥鎖 1.1. 互斥鎖 在多任務環境下,往往存在多個任務競爭同一共享資源的應用場景,互斥鎖可被用于對共享資...
發表于 01-19 11:02 ? 8247次 閱讀
小熊派華為物聯網操作系統LiteOS內核教程05-互斥鎖

小熊派華為物聯網操作系統 LiteOS內核教程04-信號量

1. LiteOS內核的信號量 1.1.信號量 在多任務操作系統中,不同的任務之間需要同步運行,信號量功能可以為用戶提供這方面...
發表于 01-18 11:04 ? 8315次 閱讀
小熊派華為物聯網操作系統 LiteOS內核教程04-信號量

小熊派華為物聯網操作系統 LiteOS內核教程03-任務管理

1. LiteOS內核的任務管理Huawei LiteOS 內核提供任務的創建、刪除、延遲、掛起、恢復等功能,以及鎖定和解鎖任務調度,...
發表于 01-18 11:03 ? 3813次 閱讀
小熊派華為物聯網操作系統 LiteOS內核教程03-任務管理

小熊派華為物聯網操作系統LiteOS內核教程02-HelloWorld

1. 創建HelloWorld工程 打開IoT Studio,點擊創建IoT Studio工程: 填寫工程設置,需要注意一下幾點: 工程名稱...
發表于 01-18 11:00 ? 4619次 閱讀
小熊派華為物聯網操作系統LiteOS內核教程02-HelloWorld

基于STM32和機智云iot開發平臺的水果分揀系統提高分揀效率

通過顏色傳感器對水果進行參數的采集再發送給PLC,PLC進行數據處理后控制分揀系統進行工作,PLC處理好的工作數據再經R...
發表于 01-02 18:44 ? 528次 閱讀
基于STM32和機智云iot開發平臺的水果分揀系統提高分揀效率

樂鑫ESP32-DOWDQ6藍牙/Wifi二合一芯片資料分享

樂鑫(Espressif Systems)研發設計IoT業內集成度最高、性能最穩定、功耗最低的無線系統級芯片。 ESP32-D0WDQ6集成無線...
發表于 12-20 16:32 ? 462次 閱讀
樂鑫ESP32-DOWDQ6藍牙/Wifi二合一芯片資料分享