Python(Arduino运动传感器,带短信通知)

2024-06-01 12:51:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一个在GitHub上发现的小项目,我有一个Arduino mega2560,我试图在它检测到运动时收到一条短信,但是当我试着运行服务器时,Python中总是出现一个错误。在

代码如下:

#!/usr/bin/env python

import serial
import requests
from datetime import datetime, timedelta

# Set the serial port to the same serial port you uploaded the arduino sketch to
# In the Arduino IDE, click "Tools > Serial Port"
# SERIAL_PORT = "/dev/tty.usbserial-A70064Mh"
SERIAL_PORT = "/dev/cu.usbmodem1421"
SERIAL_BAUD = 115200

# Don"t send more than one message every 30 minutes
SENSOR_INTERVAL = timedelta(minutes=30)

SMS_FROM = "" # Make sure this is a number on telapi.com or you'll get charged extra for spoofing
SMS_TO = ""
SMS_BODY = "ALERT! Your Arduino just detected motion!"
TELAPI_ACCOUNT_SID = ""
TELAPI_TOKEN = ""

# Try to import TELAPI_ACCOUNT_SID and such from settings_local.py, if it exists
try:
    from settings_local import *
except ImportError:
    pass

TELAPI_SMS_URL = "https://api.zang.io/v2/Accounts/{AccountSid}/SMS/Messages" % TELAPI_ACCOUNT_SID

# Start the server
if __name__ == "__main__":
    print "Starting SMS motion detector server at", datetime.now()
    last_sent_time = None

    # Open a serial connection to the Arduino
    with serial.Serial(SERIAL_PORT, SERIAL_BAUD) as arduino:
        while True:
            print "Polling Arduino..."

            # Listen for the Arduino to send a byte
            byte_received = arduino.read()

            print "Received byte:", byte_received

            # Motion was detected
            if byte_received == "1":
                print "Motion detected at", datetime.now()

                # If we haven"t sent an SMS in the last 30 minutes, send one now
                if not last_sent_time or (datetime.now() - last_sent_time) > SENSOR_INTERVAL:
                    last_sent_time = datetime.now()
                    print "Sending SMS..."

                    # Send request to TelAPI to send SMS
                    try:
                        data = {
                            "From": SMS_FROM,
                            "To": SMS_TO,
                            "Body": SMS_BODY,
                        }
                        requests.post(TELAPI_SMS_URL, data=data, auth=(TELAPI_ACCOUNT_SID, TELAPI_TOKEN))

                        print "** SMS Sent! **"

                    except Exception as e:
                        print "Some error occurred while sending SMS:", e

所以当我运行“python”时服务器.py“它给了我这个错误

^{pr2}$

现在看来泰拉皮已经不在了,但臧已经取代了它的位置,任何帮助都将不胜感激,非常感谢!在


Tags: thetoimportsenddatetimeserialbytesms
1条回答
网友
1楼 · 发布于 2024-06-01 12:51:41

我用以下代码替换zangapi来修复这个问题

TELAPI_SMS_URL = "https://api.telapi.com/2011-07-01/Accounts/%s/SMS/Messages" % TELAPI_ACCOUNT_SID

那当然是跑步了服务器.py,Arduino能够检测到运动并发送短信。在

相关问题 更多 >