了解如何使用 EVB-Pico-W5100 监控 GitHub 存储库。 介绍性指南。
转发: Real-time GitHub Repository Monitoring with Raspberry Pi Pico and Telegram
项目介绍
故事
在开源软件和协作开发的时代,跟踪 GitHub 存储库的更新变得比以往任何时候都更加重要。 无论您是开发人员、项目经理还是只是爱好者,您都会发现接收有关您最喜爱的 GitHub 存储库的实时更新非常有益。 这就是 EVB-Pico-W5100 的用武之地。该项目旨在结合 Raspberry Pi Pico、PC 服务器和 Telegram 的强大功能,创建一个实时 GitHub 存储库监控系统。
项目目的
该项目的主要目标是为 GitHub 存储库更新提供实时警报。 通过利用 Raspberry Pi Pico 和 Telegram 的即时消息服务的功能,每当受监控的 GitHub 存储库更新时,用户都可以立即收到通知。
预期效益
- 实时 GitHub 存储库监控
- 即时电报通知
- 使用 Raspberry Pi Pico 的低成本解决方案
- 易于设置和维护
- 可扩展以监控多个存储库
要求
- 树莓派 Pico
- 微型 USB 电缆
- 可上网的计算机
- Github API 令牌
- 电报机器人
树莓派 Pico 设置
将 evb-pico-w5100s 连接到以太网并准备与 PC 通信。
- 对于RP2040相关的固件和以太网通信代码,我参考了上面的GitHub来编写代码
基本示例
#pico test code
from usocket import socket
from machine import Pin,SPI
import network
import time
#W5x00 chip init
def w5x00_init():
spi=SPI(0,2_000_000, mosi=Pin(19),miso=Pin(16),sck=Pin(18))
nic = network.WIZNET5K(spi,Pin(17),Pin(20)) #spi,cs,reset pin
nic.active(True)
#None DHCP
nic.ifconfig(('192.168.1.20','255.255.255.0','192.168.1.1','8.8.8.8'))
#DHCP
#nic.ifconfig('dhcp')
print('IP address :', nic.ifconfig())
while not nic.isconnected():
time.sleep(1)
print(nic.regs())
def server_loop():
s = socket()
s.bind(('192.168.1.20', 5000)) #Source IP Address
s.listen(5)
print("TEST server")
conn, addr = s.accept()
print("Connect to:", conn, "address:", addr)
print("Loopback server Open!")
while True:
data = conn.recv(2048)
print(data.decode('utf-8'))
if data != 'NULL':
conn.send(data)
def main():
w5x00_init()
###TCP SERVER###
#server_loop()
###TCP CLIENT###
client_loop()
if __name__ == "__main__":
main()
Pico服务器代码
from usocket import socket
from machine import Pin, SPI
import network
import time
import urequests # MicroPython requests library
# Telegram Bot Token
TELEGRAM_TOKEN = "6552216859:AAGqDyzbGkxP6S7mEAbMdYsp-6BJX02DWtc"
CHAT_ID = "5795970252"
# Send message to Telegram
def send_telegram_message(message):
url = f"https://api.telegram.org/bot{TELEGRAM_TOKEN}/sendMessage"
data = {
"chat_id": CHAT_ID,
"text": message
}
urequests.post(url, json=data)
#W5x00 chip init
def w5x00_init():
spi=SPI(0,2_000_000, mosi=Pin(19),miso=Pin(16),sck=Pin(18))
nic = network.WIZNET5K(spi,Pin(17),Pin(20)) #spi,cs,reset pin
nic.active(True)
#None DHCP
nic.ifconfig(('Your IP','255.255.255.0','Your IP gateway','8.8.8.8'))
#DHCP
#nic.ifconfig('dhcp')
print('IP address :', nic.ifconfig())
while not nic.isconnected():
time.sleep(1)
print(nic.regs())
def server_loop():
s = socket()
s.bind(('Your IP', 5000))
s.listen(5)
print("TEST server")
conn, addr = s.accept()
print("Connect to:", conn, "address:", addr)
print("Loopback server Open!")
while True:
data = conn.recv(2048)
repo_info = data.decode('utf-8')
print(repo_info)
if repo_info != 'NULL':
conn.send(data)
send_telegram_message(f"New update found in repo: {repo_info}")
def main():
w5x00_init()
server_loop()
if __name__ == "__main__":
main()
电脑服务器
GitHub API
1. 登录Github并点击“设置”。
2.在您的个人帐户屏幕上,点击 Devpoer 设置
3.点击生成经典令牌。
4. 选择您想要使用 API 调用的范围并创建令牌。
基本示例
#Code to send from PC server to Pico
import socket
IP_ADDRESS = 'Your Server IP'
PORT = 5000
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect((IP_ADDRESS, PORT))
client_socket.sendall("Hello Pico".encode())
data = client_socket.recv(1024)
print('Received:', data.decode())
PC GitHub监控并发送代码
import requests
import time
# GitHub Personal Access Token
TOKEN = "Your GitHub Token"
# GitHub API URL for searching repositories
SEARCH_API_URL = "https://api.github.com/search/repositories"
def fetch_recent_w5500_repo():
headers = {
'Authorization': f'token {TOKEN}',
'Accept': 'application/vnd.github.v3+json',
'User-Agent': 'My-App'
}
params = {
'q': 'W5500', #your keyword
'sort': 'updated',
'order': 'desc'
}
response = requests.get(SEARCH_API_URL, headers=headers, params=params)
if response.status_code == 200:
data = response.json()
if data.get('items'):
return data['items'][0]
else:
print(f"Error: {response.content}")
return None
def main():
prev_repo = None
while True:
recent_repo = fetch_recent_w5500_repo()
if recent_repo is None:
print("Could not fetch data. Retrying in 60 seconds.")
time.sleep(60)
continue
if prev_repo is None:
prev_repo = recent_repo
print(f"Initial repo is {prev_repo['full_name']}. Monitoring for updates.")
elif prev_repo['updated_at'] != recent_repo['updated_at']:
print(f"New update found. Previous: {prev_repo['full_name']} ({prev_repo['updated_at']}), Current: {recent_repo['full_name']} ({recent_repo['updated_at']})")
prev_repo = recent_repo
time.sleep(10) # 10seconds interval
if __name__ == "__main__":
main()
步骤
- 安装依赖项:使用 pip 安装所需的 Python 包。
- 运行服务器代码:执行提供的 Python 脚本来启动服务器。
- 测试连接:确保服务器可以与 Raspberry Pi Pico 通信并从 GitHub 获取数据。
Telegram
Telegram Bot make
# Telegram Bot Token
TELEGRAM_TOKEN = "Your Token"
CHAT_ID = "Your ID"
# Send message to Telegram
def send_telegram_message(message):
url = f"https://api.telegram.org/bot{TELEGRAM_TOKEN}/sendMessage"
data = {
"chat_id": CHAT_ID,
"text": message
}
urequests.post(url, json=data)
步骤
- 创建机器人:使用 Telegram BotFather 创建一个新机器人。
- 获取令牌:获取机器人的 API 令牌。
- 配置代码:使用 Telegram 机器人的 API 令牌更新 Raspberry Pi Pico 代码。
- 测试通知:确保您可以从 Raspberry Pi Pico 接收 Telegram 通知。
沟通
Raspberry Pi Pico 和 PC 服务器通过本地网络进行通信。 服务器从 GitHub 获取最新更新并将此信息发送到 Raspberry Pi Pico。 然后 Pico 将这些更新转发到 Telegram。
结果
Github Monitoring
GitHub 报警检查
成功设置后,只要受监控的 GitHub 存储库有更新,您就会开始接收实时 Telegram 通知。 该项目提供了一种经济有效且简单的方式来保持您最喜爱的 GitHub 项目的更新。
您可以通过添加更多功能来随意扩展该项目,例如监视多个存储库或与其他消息传递平台集成。
与 Pico 一起发现开源存储库的宝藏
更多代码
wiznetmaker · GitHub 创客网站 github
jh941213 (JaeHyun KIM) · GitHub 本人 github