从文件中读取文本并通过Arduino发送到GSM模块

时间:2017-08-20 06:29:23

标签: python arduino gsm

我正在尝试从存储在PC中的文本文件中读取一些字符串。我的GSM模块是SIM900A我使用python来读取文本文件中包含的以下行:

AT + CMGS = \&#34 + 9232xxxxxxxx \" \ r

此行包含AT命令和我​​要向其发送短信的电话号码。

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上存储的文本文件中读取上述字符串时,我没有收到消息。谁能指导我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

如果您发布的文件内容为AT+CMGS=\"+9232xxxxxxxx\"\r,请从文件中删除转义内容。这应该是文件的内容:

AT+CMGS="+9232xxxxxxxx"

在没有尝试转义的情况下,将正确读取引号。然后当你阅读内容时,如果你需要\r只需添加它(假设行末没有换行符):

line1 = text_file.readline() + '\r'