Skip to content

Commit 77c6ad6

Browse files
authored
Merge pull request #2632 from adafruit/Adding-RGB-Matrix-NYT-Title-Scroller
Added MIT License
2 parents 7259b72 + c78934a commit 77c6ad6

File tree

2 files changed

+168
-0
lines changed

2 files changed

+168
-0
lines changed
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIHnzCCBYegAwIBAgIQD2xhgnbWafj8ozVqw5o/EDANBgkqhkiG9w0BAQsFADBc
3+
MQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xNDAyBgNVBAMT
4+
K1JhcGlkU1NMIEdsb2JhbCBUTFMgUlNBNDA5NiBTSEEyNTYgMjAyMiBDQTEwHhcN
5+
MjIxMjE1MDAwMDAwWhcNMjQwMTE1MjM1OTU5WjAaMRgwFgYDVQQDEw9hcGkubnl0
6+
aW1lcy5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDmPNlU5Ufy
7+
Sj5lpHfbJV/EIbjWcMd/jUyuiLdfiIkkNe5LLodDhMWIiVFaaFt1cn67UMpjb9lH
8+
RB2Ndf1ymDysmrg3qc8mLvNbQqZytF3l5t80wzi18XuNsJb9Q+RTMsimYRV5aN3c
9+
LKhhVV8jDC+fl0kpF6DS/M2adWxhGWebu7oZAgo2dw1cue1rvWcOx+Qs4U5hxWZ1
10+
2qCG5lQtBQmtMb9iCoaaBC8YuB/+1zMNw6kReCOj9eEgmYYsIzHTjt7uU3+yh0St
11+
Bdz1NQkoaq27GaM+J7NCwJvqMr2QBeSFmlijCJbSj+2WWneaEj7zjIkhhEEFQcoA
12+
yRR1RDDh6PGbAgMBAAGjggOdMIIDmTAfBgNVHSMEGDAWgBTwnIX9op99j8lou9XU
13+
iU0dvtOQ/zAdBgNVHQ4EFgQU3WgqBFsQws321vqwe1pzjTZlN5EwLwYDVR0RBCgw
14+
JoIPYXBpLm55dGltZXMuY29tghN3d3cuYXBpLm55dGltZXMuY29tMA4GA1UdDwEB
15+
/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwgZ8GA1UdHwSB
16+
lzCBlDBIoEagRIZCaHR0cDovL2NybDMuZGlnaWNlcnQuY29tL1JhcGlkU1NMR2xv
17+
YmFsVExTUlNBNDA5NlNIQTI1NjIwMjJDQTEuY3JsMEigRqBEhkJodHRwOi8vY3Js
18+
NC5kaWdpY2VydC5jb20vUmFwaWRTU0xHbG9iYWxUTFNSU0E0MDk2U0hBMjU2MjAy
19+
MkNBMS5jcmwwPgYDVR0gBDcwNTAzBgZngQwBAgEwKTAnBggrBgEFBQcCARYbaHR0
20+
cDovL3d3dy5kaWdpY2VydC5jb20vQ1BTMIGHBggrBgEFBQcBAQR7MHkwJAYIKwYB
21+
BQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0LmNvbTBRBggrBgEFBQcwAoZFaHR0
22+
cDovL2NhY2VydHMuZGlnaWNlcnQuY29tL1JhcGlkU1NMR2xvYmFsVExTUlNBNDA5
23+
NlNIQTI1NjIwMjJDQTEuY3J0MAkGA1UdEwQCMAAwggF+BgorBgEEAdZ5AgQCBIIB
24+
bgSCAWoBaAB2AO7N0GTV2xrOxVy3nbTNE6Iyh0Z8vOzew1FIWUZxH7WbAAABhRaF
25+
wuEAAAQDAEcwRQIgKLCeqkrjGe9nSC/sbLDMHvfQDvi8RFzgjnz5qicayc8CIQCg
26+
guI7j2ciedxxEsR7mMiA2aD9Z3ro0zLEMHTBILX76gB3AHPZnokbTJZ4oCB9R53m
27+
ssYc0FFecRkqjGuAEHrBd3K1AAABhRaFw0cAAAQDAEgwRgIhAKBU50wlOLjF3zzS
28+
UhZHC57tDPTIab3BdyX6Z5E1hLZAAiEAkZFZJ/JtfykHDaOjQvSEiv9S7SAs0jQa
29+
MCBaFN14Ku8AdQBIsONr2qZHNA/lagL6nTDrHFIBy1bdLIHZu7+rOdiEcwAAAYUW
30+
hcMFAAAEAwBGMEQCIF8lbd6U3N7GCS24Dm/Hge5Rojk8rtF8kXTjTemPTMaOAiAJ
31+
pVGauhZb0KtXRmw0bA+sUjV4f+CXGxSY7jqXnbUngTANBgkqhkiG9w0BAQsFAAOC
32+
AgEAZvUvxSgTCZ4Bh9Pb9mwSUrVvOq652qoiSn6C1GiInXn/auNS54cT5kYXxK1j
33+
DEZXswyAilEKPeqgcSqF7xXdiTBAey0MOqqr4+BPjjz2kDQ6ABfkYkwiqTWq76Ag
34+
0BNe1O970ghOVds/4KqekBiTce4Ynq+TsxURWGh9U1IqfpKpZf2Y1nVmGhGRuW2M
35+
Ddj7UesSSdHCepBOtbaxDu1TY3aizN6MhJtnX7nxGUyhxcTBmLgzi0MBPrna/w4n
36+
4m+v1DcGe+s+uu/J/Q7A4OPijlVnaDHIEBGx1VJj8WRy70sQTWihbKoRkcTBBo+/
37+
JPdSVsCoSQuMe1fWDO0Q6GvoZqnEgdAfvkLDmfUKo3TXHK99YEcMjPYB+nG6/oce
38+
EERCPqvT/d2IM5uv3ygGZpmL0c0DoaddkbZvlD5ecPBLCv0qIPbXCVlh6pku/dgp
39+
NDoXlCJiBAJQtMGpTZxRzrMUf3wIhBYisZuWjet7tXG6r+mkH0e+czpzGxrsfD6i
40+
UZ+C98AP2Ulz65Fdp0qWqSw0fzgGAolG2orthYQCFgio1n7y9Z9HgA+JAFygfzjD
41+
rd2ariejy+cFLQGQSfbeD+/IQ6DlKMWJFfr5GOc67Q1VL0+99wq/zIjidfCqBazX
42+
XoyjoXl3T+HH8yNk1jqgMxWVvz1eGVsi2vu6uLe5/27RIfQ=
43+
-----END CERTIFICATE-----
44+
-----BEGIN CERTIFICATE-----
45+
MIIFyzCCBLOgAwIBAgIQCgWbJfVLPYeUzGYxR3U4ozANBgkqhkiG9w0BAQsFADBh
46+
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
47+
d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
48+
QTAeFw0yMjA1MDQwMDAwMDBaFw0zMTExMDkyMzU5NTlaMFwxCzAJBgNVBAYTAlVT
49+
MRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE0MDIGA1UEAxMrUmFwaWRTU0wgR2xv
50+
YmFsIFRMUyBSU0E0MDk2IFNIQTI1NiAyMDIyIENBMTCCAiIwDQYJKoZIhvcNAQEB
51+
BQADggIPADCCAgoCggIBAKY5PJhwCX2UyBb1nelu9APen53D5+C40T+BOZfSFaB0
52+
v0WJM3BGMsuiHZX2IHtwnjUhLL25d8tgLASaUNHCBNKKUlUGRXGztuDIeXb48d64
53+
k7Gk7u7mMRSrj+yuLSWOKnK6OGKe9+s6oaVIjHXY+QX8p2I2S3uew0bW3BFpkeAr
54+
LBCU25iqeaoLEOGIa09DVojd3qc/RKqr4P11173R+7Ub05YYhuIcSv8e0d7qN1sO
55+
1+lfoNMVfV9WcqPABmOasNJ+ol0hAC2PTgRLy/VZo1L0HRMr6j8cbR7q0nKwdbn4
56+
Ar+ZMgCgCcG9zCMFsuXYl/rqobiyV+8U37dDScAebZTIF/xPEvHcmGi3xxH6g+dT
57+
CjetOjJx8sdXUHKXGXC9ka33q7EzQIYlZISF7EkbT5dZHsO2DOMVLBdP1N1oUp0/
58+
1f6fc8uTDduELoKBRzTTZ6OOBVHeZyFZMMdi6tA5s/jxmb74lqH1+jQ6nTU2/Mma
59+
hGNxUuJpyhUHezgBA6sto5lNeyqc+3Cr5ehFQzUuwNsJaWbDdQk1v7lqRaqOlYjn
60+
iomOl36J5txTs0wL7etCeMRfyPsmc+8HmH77IYVMUOcPJb+0gNuSmAkvf5QXbgPI
61+
Zursn/UYnP9obhNbHc/9LYdQkB7CXyX9mPexnDNO7pggNA2jpbEarLmZGi4grMmf
62+
AgMBAAGjggGCMIIBfjASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTwnIX9
63+
op99j8lou9XUiU0dvtOQ/zAfBgNVHSMEGDAWgBQD3lA1VtFMu2bwo+IbG8OXsj3R
64+
VTAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMC
65+
MHYGCCsGAQUFBwEBBGowaDAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNl
66+
cnQuY29tMEAGCCsGAQUFBzAChjRodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20v
67+
RGlnaUNlcnRHbG9iYWxSb290Q0EuY3J0MEIGA1UdHwQ7MDkwN6A1oDOGMWh0dHA6
68+
Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEdsb2JhbFJvb3RDQS5jcmwwPQYD
69+
VR0gBDYwNDALBglghkgBhv1sAgEwBwYFZ4EMAQEwCAYGZ4EMAQIBMAgGBmeBDAEC
70+
AjAIBgZngQwBAgMwDQYJKoZIhvcNAQELBQADggEBAAfjh/s1f5dDdfm0sNm74/dW
71+
MbbsxfYV1LoTpFt+3MSUWvSbiPQfUkoV57b5rutRJvnPP9mSlpFwcZ3e1nSUbi2o
72+
ITGA7RCOj23I1F4zk0YJm42qAwJIqOVenR3XtyQ2VR82qhC6xslxtNf7f2Ndx2G7
73+
Mem4wpFhyPDT2P6UJ2MnrD+FC//ZKH5/ERo96ghz8VqNlmL5RXo8Ks9rMr/Ad9xw
74+
Y4hyRvAz5920myUffwdUqc0SvPlFnahsZg15uT5HkK48tHR0TLuLH8aRpzh4KJ/Y
75+
p0sARNb+9i1R4Fg5zPNvHs2BbIve0vkwxAy+R4727qYzl3027w9jEFC6HMXRaDc=
76+
-----END CERTIFICATE-----
77+
-----BEGIN CERTIFICATE-----
78+
MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh
79+
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
80+
d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
81+
QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT
82+
MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
83+
b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG
84+
9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB
85+
CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97
86+
nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt
87+
43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P
88+
T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4
89+
gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO
90+
BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR
91+
TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw
92+
DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr
93+
hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg
94+
06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF
95+
PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls
96+
YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
97+
CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
98+
-----END CERTIFICATE-----
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
# SPDX-FileCopyrightText: 2023 Trevor Beaton for Adafruit Industries
2+
#
3+
# SPDX-License-Identifier: MIT
4+
5+
import os
6+
import time
7+
import ssl
8+
import wifi
9+
import board
10+
import terminalio
11+
import socketpool
12+
from adafruit_matrixportal.matrixportal import MatrixPortal
13+
import adafruit_requests
14+
15+
SCROLL_DELAY = 0.03
16+
time_interval = 5
17+
18+
text_color = 0xFC6900 # e.g., Retro Orange
19+
20+
BASE_URL = "https://api.nytimes.com/svc/topstories/v2/"
21+
CATEGORY = "arts" # Change this to whatever category you want
22+
23+
# The following values are allowed:
24+
# arts, automobiles, books/review, business, fashion, food, health, home, insider, magazine, movies,
25+
# nyregion, obituaries, opinion, politics, realestate, science, sports, sundayreview, technology,
26+
# theater, t-magazine, travel, upshot, us, world
27+
28+
# --- Wi-Fi setup ---
29+
wifi.radio.connect(os.getenv("CIRCUITPY_WIFI_SSID"), os.getenv("CIRCUITPY_WIFI_SSID"))
30+
print(f"Connected to {os.getenv('CIRCUITPY_WIFI_SSID')}")
31+
32+
# --- Display setup ---
33+
matrixportal = MatrixPortal(status_neopixel=board.NEOPIXEL, debug=True)
34+
35+
matrixportal.add_text(
36+
text_font=terminalio.FONT,
37+
text_position=(0, (matrixportal.graphics.display.height // 2) - 1),
38+
scrolling=True,
39+
)
40+
41+
NYT_header_text_area = matrixportal.add_text(
42+
text_font=terminalio.FONT,
43+
text_position=(0, (matrixportal.graphics.display.height // 6) - 1),
44+
)
45+
46+
matrixportal.set_text("NYT:", NYT_header_text_area)
47+
48+
# --- Networking setup ---
49+
context = ssl.create_default_context()
50+
with open("/api-nytimes-com-chain.pem", "rb") as certfile:
51+
context.load_verify_locations(cadata=certfile.read())
52+
53+
pool = socketpool.SocketPool(wifi.radio)
54+
requests = adafruit_requests.Session(pool, context)
55+
56+
NYT_API_KEY = os.getenv("NYT_API_KEY")
57+
DATA_SOURCE = BASE_URL + CATEGORY + ".json?api-key=" + NYT_API_KEY
58+
59+
# --- Main Loop ---
60+
while True:
61+
print("Fetching json from", DATA_SOURCE)
62+
response = requests.get(DATA_SOURCE)
63+
titles = [result["title"] for result in response.json()["results"]]
64+
65+
for title in titles:
66+
matrixportal.set_text(title)
67+
matrixportal.set_text_color(text_color)
68+
matrixportal.scroll_text(SCROLL_DELAY)
69+
70+
time.sleep(time_interval)

0 commit comments

Comments
 (0)