无线布告栏是该项目的非常有选择性的术语,因为它的范围很广,而不仅仅是一个简单的布告栏。首先,我们应该了解该项目的目的,在该系统中,我们可以向某些显示设备(例如LCD)显示消息或通知,并且可以通过使用您的SMS功能在世界任何地方轻松设置或更改此消息。手机。无论我们要显示什么通知,只需发送带有一些前缀和后缀的文本短信即可。
这在酒店,购物中心,大学,办公室非常有用,甚至可以在家中任何地方使用。就像您可以在酒店房间的门口设置“请勿打扰”之类的消息,或者在您离开家时在您家门口的台阶上设置消息一样,当然,它也可以用作学校,学院,电影院等的布告栏。是的,这不是一个简单的留言板,该项目的用处是您可以从任何地方设置或更改消息或通知,只需从手机发送短信即可。您还可以在不同类型的显示器上检查类似的项目:使用Outdoor P10 LED矩阵显示器的Arduino记分板。
我们以前曾使用手机的SMS设施实现家庭安全并远程控制家用电器:PIR传感器和基于GSM的安全系统以及使用Arduino的基于GSM的家庭自动化
工作说明:
在这个项目中,使用Arduino UNO来控制整个过程,使用GSM模块(SIM900A)来接收从手机和LCD发送的SMS /消息以显示消息。
我们可以通过短信发送一些消息或通知,例如“ #Circuit Digest *”,“#We Welcomes *”。在这里,我们在消息字符串中使用了前缀“#”。此前缀用于标识消息或通知的开头。而“ *”用作后缀以指示消息或通知的结尾。
当我们将短信从手机发送到GSM模块时,GSM就会收到该短信并将其发送到Arduino。现在,Arduino阅读了此SMS,并从接收到的字符串中提取主要通知消息,并将其存储在另一个字符串中。然后使用适当的命令将提取的消息发送到16x2 LCD。
该系统的进一步工作在下面的“代码描述”部分中进行了说明。在进入编程细节之前,我们应该了解GSM模块。
GSM模块:
GSM模块 用于许多基于GSM(全球移动通信系统)技术的通信设备中。它用于通过计算机与GSM网络进行交互。GSM模块仅了解 AT命令,并可以做出相应响应。最基本的命令是“ AT”,如果GSM响应正常,则说明运行良好,否则将响应“错误”。有各种AT命令,例如ATA用于接听电话,ATD拨打电话,AT + CMGR读取消息,AT + CMGS发送短信等。AT命令后面应跟回车符,即\ r(十六进制的0D ),例如“ AT + CMGS \ r”。我们可以使用以下命令来使用GSM模块:
ATE0用于回声关闭
AT + CNMI = 2,2,0,0,0
ATD
AT + CMGF = 1
AT + CMGS =“手机号码”
>>现在我们可以写留言了
>>留言后
Ctrl + Z发送消息命令(十进制26)。
十六进制中的ENTER = 0x0d
所述 SIM900 是一个完整的四频 GSM / GPRS模块 ,其支持GSM / GPRS 850/900/1800 / 1900MHz的语音,SMS和数据以低功耗性能。
电路说明:
使用GSM和Arduino的无线公告板的连接很简单,如下图所示。此处,液晶显示器(LCD)用于显示“通知”或消息,该消息通过手机以SMS的形式发送。LCD的数据引脚,即RS,EN,D4,D5,D6,D7连接到arduino数字引脚编号7、6、5、4、3、2。并且GSM模块的Rx和Tx引脚直接连接到Tx和Rx分别为Arduino的引脚。GSM模块使用12伏适配器供电。
代码说明:
该程序的代码很容易理解;GSN初始化函数gsm_init()在这里是新东西,最后将进行说明。
在程序中,我们首先包括液晶显示器(LCD)库,然后定义LCD的数据和控制引脚以及一些变量。
#包括
此后,串行通信被初始化为9600 bps,并为使用的引脚提供方向。并在设置循环中初始化GSM模块。
void setup(){lcd.begin(16,2); Serial.begin(9600); pinMode(led,OUTPUT); digitalWrite(led,HIGH); lcd.print(“ GSM正在初始化…”); gsm_init(); lcd.setCursor(0,0); lcd.print(“无线公告”);
为了串行接收数据,我们使用两个功能,一个是Serial.available,它检查是否有串行数据要来,而另一个是Serial.read,它读取串行来的数据。
void serialEvent(){while(Serial.available()){char ch =(char)Serial.read(); str = ch; if(ch =='*'){temp = 1; lcd.clear(); lcd.print(“收到消息”); 延迟(1000); }}}
串行接收数据后,我们将其存储在字符串中,并在该字符串中检查“#”和“ *”,以查找通知或消息的开头和结尾。然后最后使用lcd.print将注意事项打印在LCD上:
void loop(){for(unsigned int t = 0; t <60000; t ++){serialEvent(); if(temp == 1){x = 0,k = 0,temp = 0; 而(x
GSM的初始化函数'gsm_init() '在这里很重要,首先,通过向GSM模块发送“ AT”命令来检查GSM模块是否已连接。如果收到响应OK,则表示已准备就绪。系统会一直检查模块,直到模块准备就绪或收到“确定”为止。然后通过发送ATE0命令关闭ECHO,否则GSM模块将回显所有命令。然后,最后通过“ AT + CPIN?”检查网络可用性。命令,如果插入的卡是SIM卡并且存在PIN,则给出响应+ CPIN:READY。还要反复检查,直到找到网络。可以通过下面的视频清楚地了解这一点。
无效gsm_init(){lcd.clear(); lcd.print(“查找模块..”); boolean at_flag = 1; while(at_flag){Serial.println(“ AT”); while(Serial.available()> 0){if(Serial.find(“ OK”))at_flag = 0; } delay(1000); }