import serial
import time
import datetime
import socket
import os
# 定义串口名称和波特率
ser = serial.Serial('/dev/ttyS0', 115200, timeout=0.5)
# 定义拍照指令
CAMERA_CMD = b"take_picture"
# 定义上传服务器的地址和端口号
SERVER_ADDRESS = "http://your_server_address"
SERVER_PORT = "your_server_port"
# 定义上传服务器的用户名和密码
USERNAME = "your_username"
PASSWORD = "your_password"
# 定义照片保存位置
PHOTO_PATH = "/home/pi/photos/"
# 定义上传照片的函数
def upload_photo(filepath):
# 创建TCP套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接服务器
client_socket.connect((SERVER_ADDRESS, SERVER_PORT))
# 发送认证信息
auth_info = (USERNAME + ":" + PASSWORD).encode('utf-8')
client_socket.sendall(auth_info)
response = client_socket.recv(1024).decode('utf-8')
if "OK" in response:
# 发送照片数据
with open(filepath, 'rb') as f:
img_data = f.read()
client_socket.sendall(img_data)
response = client_socket.recv(1024).decode('utf-8')
print(response)
# 关闭套接字
client_socket.close()
# 定义拍照并上传的函数
def capture_and_upload():
# 构造文件名
filename = datetime.datetime.now().strftime("%Y%m%d%H%M%S") + ".jpg"
filepath = PHOTO_PATH + filename
# 发送拍照命令
ser.write(CAMERA_CMD)
# 等待拍照完成
time.sleep(3)
# 读取ESP32CAM发送的照片数据
photo_data = ser.read(ser.inWaiting())
# 保存照片
with open(filepath, 'wb') as f:
f.write(photo_data)
# 上传照片
upload_photo(filepath)
# 删除本地照片
os.remove(filepath)
# 每隔10秒执行一次拍照并上传操作
while True:
capture_and_upload()
time.sleep(10)