介绍:

我是Arduino编程和使用AT命令的新手。我已经尝试搜索整个互联网,并在Arduino论坛上提问,但是我没有运气,似乎没人在那里给我一个清晰的主意。

问题:

因此,我有此代码,SMS命令可以打开和关闭灯,并且该代码仅响应特定的电话号码。我的问题是,即使我使用其他电话号码,程序也会响应。我希望有一种方法,它只能将特定的数字列入白名单,这样在所有者不知情的情况下,任何人都无法胡闹该程序。

例如:


所有者的电话号码是+631234567890
一些随机的电话号码:+ 63xxxxxxxxxx


所有者可以打开和关闭灯。 [是]
但据推测,随机电话号码不能且永远不会有权打开和关闭灯。只有所有者可以。

这是我的当前代码:CCTO

#include <SoftwareSerial.h>
SoftwareSerial GPRS(10, 11);
String textMessage;
String lampState;
const int relay = 12;

void setup() {
  pinMode(relay, OUTPUT);
  digitalWrite(relay, HIGH);

  Serial.begin(9600);
  GPRS.begin(9600);
  delay(5000);
  Serial.print("GPRS ready...\r\n");
  GPRS.print("AT+CMGF=1\r\n");
  delay(1000);
  GPRS.print("AT+CNMI=2,2,0,0,0\r\n");
  delay(1000);
}

void loop(){
  if(GPRS.available()>0){
    textMessage = GPRS.readString();
    Serial.print(textMessage);
    delay(10);
  }
  if(textMessage.indexOf("ON")>=0){
    // Turn on relay and save current state
    digitalWrite(relay, HIGH);
    lampState = "ON";
    Serial.println("Lamp set to ON\r\n");
    textMessage = "";
    GPRS.println("AT+CMGS=\"+631234567890\"");
    delay(500);
    GPRS.print("Lamp was finally switched ON.\r");
    GPRS.write( 0x1a );
    delay(1000);
  }
  if(textMessage.indexOf("OFF")>=0){
    // Turn off relay and save current state
    digitalWrite(relay, LOW);
    lampState = "OFF";
    Serial.println("Lamp set to OFF\r\n");
    textMessage = "";
    GPRS.println("AT+CMGS=\"+631234567890\"");
    delay(500);
    GPRS.print("Lamp was finally switched OFF.\r");
    GPRS.write( 0x1a );
    delay(1000);
  }
  if(textMessage.indexOf("STATUS")>=0){
    String message = "Lamp is " + lampState;
    GPRS.print("AT+CMGF=1");
    delay(1000);
    Serial.println("Lamp state resquest");
    textMessage = "";
    GPRS.println("AT+CMGS=\"+631234567890\"");
    delay(500);
    GPRS.print("Lamp is currently ");
    GPRS.println(lampState ? "ON" : "OFF");
    GPRS.write( 0x1a );
    delay(1000);
  }
}


我怎样才能做到这一点?

最佳答案

您的textMessage必须包含有关发件人和消息时间的信息。像这样:


+ CMGL:2,“ REC UNREAD”,“ + 63xxxxxxxxxx”,“ 07/02 / 18,00:07:22 + 32” SMS短信的简单演示。


因此,您需要提取电话号码并与授权号码进行比较。

关于arduino - 如何防止其他电话/手机号码向Arduino发送短信命令?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51898040/

10-13 03:45