首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我想回复一个带有DHT11值的短信

我想回复一个带有DHT11值的短信
EN

Stack Overflow用户
提问于 2019-03-29 02:45:29
回答 1查看 29关注 0票数 0
代码语言:javascript
复制
#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”),则不会显示任何消息;

它可以工作,但我不希望它是一个固定的数字,我想回复它收到的任何数字

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-29 04:14:05

固定/工作代码为: AT+CMGS="+1234"\r (在数字前后加引号和回车\r ),其中草图中的代码为AT+CMGS=+1234 (不加引号和回车)。尝试:

代码语言:javascript
复制
mySerial.println("AT+CMGS=\"" + number + "\"\r");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55404830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档