#include<SoftwareSerial.h>
#include "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
SoftwareSerial mySerial(10, 11);
int index = 0;
float h;
float temp;
char incomingByte;
String incomingData;
bool atCommand = true;
String message = "";
String number = "";
void setup()
{
Serial.begin(9600);
mySerial.begin(9600);
dht.begin();
while (!mySerial.available()) {
mySerial.println("AT");
delay(1000);
Serial.println("connecting....");
}
mySerial.println("AT+CMGF=1"); //Set SMS Text Mode
delay(1000);
mySerial.println("AT+CNMI=1,2,0,0,0"); //procedure, how to receive messages from the network
delay(1000);
//mySerial.println("AT+CMGL=\"REC UNREAD\""); // Read unread messages
mySerial.println("AT+CBAND=DCS_MODE");
Serial.println("Ready to receive Commands..");
}
void loop()
{
if (mySerial.available()) {
delay(100);
// Serial buffer
while (mySerial.available()) {
incomingByte = mySerial.read();
incomingData += incomingByte;
}
delay(10);
if (atCommand == false) {
receivedMessage(incomingData);
}
else {
atCommand = false;
}
//delete messages to save memory
if (incomingData.indexOf("OK") == -1) {
mySerial.println("AT+CMGDA=\"DEL ALL\"");
delay(1000);
atCommand = true;
}
incomingData = "";
}
if (message.indexOf("SEND") > -1) { //
SendTextMessage();
Serial.println("send");
}
}
void SendTextMessage()
{
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float h = dht.readHumidity();
// Read temperature as Celsius (the default)
float temp = dht.readTemperature();
// Read temperature as Fahrenheit (isFahrenheit = true)
float f = dht.readTemperature(true);
mySerial.println("AT+CMGF=1"); //To send SMS in Text Mode
delay(1000);
mySerial.println("AT+CMGS=" + number); // change to the phone number you using
delay(2000);
mySerial.print("Humidity: ");
mySerial.print(h);
mySerial.print(" % ");
mySerial.print("Temperature: ");
mySerial.print(temp);
mySerial.println(" *C ");
delay(200);
mySerial.println((char)26);//the stopping character
delay(1000);
}
void receivedMessage(String inputString) {
//Get The number of the sender
index = inputString.indexOf('"') + 1;
inputString = inputString.substring(index);
index = inputString.indexOf('"');
number = inputString.substring(0, index);
Serial.println("Number: " + number);
//Get The Message of the sender
index = inputString.indexOf("\n") + 1;
message = inputString.substring(index);
message.trim();
Serial.println("Message: " + message);
message.toUpperCase(); // uppercase the message received
Serial.println("receive");
delay(50);
}这是我的代码,假设我发送了一条短信,说从我的号码1234发送,代码检测号码,当使用下面的行将信息发送到我的号码时
mySerial.println("AT+CMGS=“+ number);
我在串行监视器上看到了这个
正在连接...准备好接收命令..数量: OK
消息: OK接收号码:+1234消息:发送接收发送发送号码: AT+CMGF=1
好的AT+CMGS=+1234
错误湿度: 64.00消息: OK AT+CMGS=+1234
错误湿度: 64.00接收
如果我将此代码更改为mySerial.println(“AT+CMGS=\”+1234\“\r”),则不会显示任何消息;
它可以工作,但我不希望它是一个固定的数字,我想回复它收到的任何数字
谢谢
发布于 2019-03-29 04:14:05
固定/工作代码为: AT+CMGS="+1234"\r (在数字前后加引号和回车\r ),其中草图中的代码为AT+CMGS=+1234 (不加引号和回车)。尝试:
mySerial.println("AT+CMGS=\"" + number + "\"\r");https://stackoverflow.com/questions/55404830
复制相似问题