24小时联系电话:18217114652、13661815404
中文
技术专题
使用手机和GSM模块随时随地控制您的家用电器
使用手机和GSM模块随时随地控制您的家用电器
关于GSM模块
我们将在这里使用的GSM模块是SIM800L。与其他GSM模块相比,它紧凑且高效。当您想使用Arduino在蜂窝网络上工作时,可以使用这种类型的模块。SIM800L支持850/900/1800 / 1900MH四频。通过使用此模块,您可以轻松地传输语音,发送SMS以及访问Internet。
当您使用3.8-4.2伏电源为模块供电时,板上的LED将开始闪烁。如果闪烁速度非常快,则表示SIM卡未注册到任何网络。如果指示灯缓慢闪烁,则表明SIM已成功登录到网络。请确保您的电源至少为2A,因为此模块会消耗大量功率。
SIM800L的引脚图
输入电压:3.8-4.2V
工作电流:2A
四频850/900/1800 / 1900MHz
接口:使用AT命令的UART
SIM卡类型:MicroSIM
Arduino UNO
我们将使用手机向GSM模块发送消息。该消息将包含一个字母。假设您有一台设备,那么我们将有一个字母来打开设备,并有一个字母来关闭设备。让我们假设我们正在发送一个字母“ a”来打开设备,并发送一个字母“ b”来关闭设备。您的设备通过继电器连接到Arduino板。Arduino
将持续监控来自GSM模块的数据。如果GSM模块接收到包含字母“ a”的消息,那么Arduino将通过向中继模块发送信号来打开设备的电源。如果GSM模块接收到包含字母“ b”的消息,那么Arduino将通过向中继模块发送信号来关闭设备。
重要说明:在将代码上传到Arduino UNO板上之前,请确保已断开GSM模块的RX和TX线的连接。将代码上传到Arduino UNO板上后,将GSM模块的RX和RX线连接到Arduino UNO板上。
int appliance1=2;
char gsmData;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
delay(25000);
pinMode(appliance1,OUTPUT);
Serial.print("AT+CMGF=1\r");
delay(100);
Serial.print("AT+CNMI=2,2,0,0,0\r");
delay(100);
digitalWrite(appliance1,HIGH);
}
void loop() {
// put your main code here, to run repeatedly:
if(Serial.available()>0)
{
gsmData=Serial.read();
if(gsmData=='a')
{
digitalWrite(appliance1,LOW);
}
else if(gsmData=='b')
{
digitalWrite(appliance1,HIGH);
}
}
Serial.print("AT+CMGD=1,4");
}
int appliance1=2;
char gsmData;
创建一个名为Appliance1的变量,以在您已连接继电器信号引脚的位置存储引脚号。另外,创建另一个名为gsmData的变量,以存储Arduino从GSM模块接收的数据。
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
delay(25000);
pinMode(appliance1,OUTPUT);
在void setup()中,首先将GSM的波特率设置为115200。然后设置较大的延迟,以使GSM模块成功登录到网络。然后将继电器的信号引脚设置为输入,因为Arduino将使用该引脚向继电器发送信号。
Serial.print("AT+CMGF=1\r");
delay(100);
Serial.print("AT+CNMI=2,2,0,0,0\r");
delay(100);
使用AT + CMGF = 1命令,以文本形式设置SMS模式。然后给出100毫秒的延迟。之后,使用AT + CNMI = 2,2,0,0,0命令,将SMS的内容发送到串行端口。
digitalWrite(appliance1,HIGH);
void loop() {
// put your main code here, to run repeatedly:
if(Serial.available()>0)
{
gsmData=Serial.read();
在void loop()中,首先使用available()命令检查串行通讯是否可用。之后,将来自GSM模块的数据存储到变量gsmData中。
if(gsmData=='a')
{
digitalWrite(appliance1,LOW);
}
else if(gsmData=='b')
{
digitalWrite(appliance1,HIGH);
}
}
使用if else-if语句检查GSM数据。如果数据等于“ a”,则打开继电器模块。如果数据等于“ b”,则关闭继电器模块。
Serial.print("AT+CMGD=1,4");