介绍:
我是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/