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