从文件中读取文本并通过 Arduino 发送到 GSM 模块
Reading Text from file and sending to GSM Module through Arduino
我正在尝试从存储在我的 PC 中的文本文件中读取一些字符串。我的 GSM 模块是 SIM900A 我正在使用 python 读取文本文件中包含的以下行:
AT+CMGS=\"+9232xxxxxxxx\"\r
此行包含 AT 命令和我要向其发送短信的 phone 号码。
Python代码如下:
import serial
import time
arduino = serial.Serial("COM3",9600,timeout = 5)
time.sleep(2)
i = 0
while(i<1):
arduino.flush()
text_file = open("Data.txt","r")
line1 = text_file.readline()
arduino.write(line1)
time.sleep(1)
i = i + 1
exit()
text_file.close()
Arduino代码如下:
#include <SoftwareSerial.h>
SoftwareSerial mySerial(7, 8);
int counter = 0;
String msg1;
String numb = "AT+CMGS=\"+9232xxxxxxxx\"\r";
void setup() {
mySerial.begin(9600);
Serial.begin(9600);
delay(100);
}
void loop() {
while (!Serial.available()) {} // wait for data to arrive
// serial read section
while (Serial.available()) {
if(Serial.available()>0) {
msg1 = Serial.readString();
if(counter<1) {
SendMessage();
counter++;
}
}
delay(500);
}
if (mySerial.available()>0) Serial.write(mySerial.read());
}
void SendMessage() {
mySerial.println("AT+CMGF=1");
//Sets the GSM Module in Text Mode
delay(1000);
// Delay of 1000 milli seconds or 1 second
mySerial.println(msg1);
// Replace x with mobile number
delay(1000);
mySerial.println("Hello");
// The SMS text you want to send
delay(100);
mySerial.println((char)26);
// ASCII code of CTRL+Z
delay(1000);
}
mySerial.println("AT+CMGS=\"+9232xxxxxxxx\"\r");
mySerial.println(numb);
mySerial.println(msg1);
如果我使用第一行,我会在我的号码上收到消息。同样,对于选项 2,当我传递我在上面的 Arduino 代码中声明的字符串 numb 时,我收到消息。
然而,对于选项 3,当我从存储在 PC 上的文本文件中读取上述字符串时,我没有收到消息。谁能指导我这里做错了什么?
如果文件内容与您发布的一样 AT+CMGS=\"+9232xxxxxxxx\"\r
,请删除文件中的转义符。这应该是文件的内容:
AT+CMGS="+9232xxxxxxxx"
引号将被正确阅读而不会尝试转义。然后当你阅读内容时,如果你需要 \r
只需添加它(假设行尾没有换行符):
line1 = text_file.readline() + '\r'
我正在尝试从存储在我的 PC 中的文本文件中读取一些字符串。我的 GSM 模块是 SIM900A 我正在使用 python 读取文本文件中包含的以下行:
AT+CMGS=\"+9232xxxxxxxx\"\r
此行包含 AT 命令和我要向其发送短信的 phone 号码。
Python代码如下:
import serial
import time
arduino = serial.Serial("COM3",9600,timeout = 5)
time.sleep(2)
i = 0
while(i<1):
arduino.flush()
text_file = open("Data.txt","r")
line1 = text_file.readline()
arduino.write(line1)
time.sleep(1)
i = i + 1
exit()
text_file.close()
Arduino代码如下:
#include <SoftwareSerial.h>
SoftwareSerial mySerial(7, 8);
int counter = 0;
String msg1;
String numb = "AT+CMGS=\"+9232xxxxxxxx\"\r";
void setup() {
mySerial.begin(9600);
Serial.begin(9600);
delay(100);
}
void loop() {
while (!Serial.available()) {} // wait for data to arrive
// serial read section
while (Serial.available()) {
if(Serial.available()>0) {
msg1 = Serial.readString();
if(counter<1) {
SendMessage();
counter++;
}
}
delay(500);
}
if (mySerial.available()>0) Serial.write(mySerial.read());
}
void SendMessage() {
mySerial.println("AT+CMGF=1");
//Sets the GSM Module in Text Mode
delay(1000);
// Delay of 1000 milli seconds or 1 second
mySerial.println(msg1);
// Replace x with mobile number
delay(1000);
mySerial.println("Hello");
// The SMS text you want to send
delay(100);
mySerial.println((char)26);
// ASCII code of CTRL+Z
delay(1000);
}
mySerial.println("AT+CMGS=\"+9232xxxxxxxx\"\r");
mySerial.println(numb);
mySerial.println(msg1);
如果我使用第一行,我会在我的号码上收到消息。同样,对于选项 2,当我传递我在上面的 Arduino 代码中声明的字符串 numb 时,我收到消息。
然而,对于选项 3,当我从存储在 PC 上的文本文件中读取上述字符串时,我没有收到消息。谁能指导我这里做错了什么?
如果文件内容与您发布的一样 AT+CMGS=\"+9232xxxxxxxx\"\r
,请删除文件中的转义符。这应该是文件的内容:
AT+CMGS="+9232xxxxxxxx"
引号将被正确阅读而不会尝试转义。然后当你阅读内容时,如果你需要 \r
只需添加它(假设行尾没有换行符):
line1 = text_file.readline() + '\r'