最好的电子音响科技diy制作网站

haoDIY_音响电子电脑科技DIY小制作发明

基于Arduino的GSM短信远程控制单元(2)

时间:2017-05-18 22:20来源:未知 作者:admin 点击:
一个复位按钮,电源不需要断电复位装置。 工作原理 10K电阻将复位线接近5V。当按下按钮,复位线将被拉到0V,从而使微控制器复位。 当松开按钮,复位线返回% V,resterting微控制器。 步骤7:sim800l模块 本单元的核

一个复位按钮,电源不需要断电复位装置。

工作原理

10K电阻将复位线接近5V。当按下按钮,复位线将被拉到0V,从而使微控制器复位。当松开按钮,复位线返回% V,resterting微控制器。

步骤7:sim800l模块

基于Arduino的GSM短信远程控制单元

本单元的核心是sim800l GSM模块。该模块只使用3个I / O引脚微控制器。

模块接口的微控制器通过一个标准的串行端口。

  • 所有命令的单位是通过使用标准的串口发送命令。
  • 有来电时,或者当一个短信接收的信息是通过使用ASCII文本。串口发送到微控制器

为了节省空间,GSM模块连接的PC板通过一个针头。这使得GSM模块容易去除。这也使得用户能够方便地插入/删除模块底部的SIM卡。

一个活跃的SIM卡是必需的,和SIM卡必须能够发送和接收短信。

该sim800l GSM模块设置

在供电单元、GSM模块复位引脚被拉低,第二。这确保了GSM模块只启动后电力供应稳定。GSM模块需要几秒钟来重新启动,那么等待5秒再发送任何命令模块。

确保GSM模块配置正确与微控制器进行通信,在启动过程中使用的命令如下:

用来确定是否一个GSM模块是可用的

在CREG?

轮询这个命令直到GSM模块在手机网络注册

在+ CMGF = 1

设置短信为ASCII模式

在北马里亚纳群岛联邦= 1,2,0,0,0

如果短信值班,发送短信的详细介绍GSM模块串口

在cmgd = 1

删除任何短信存储在SIM卡

在+修饰=“SM

套GSM模块SIM卡电话簿

在+警察= 2,然后在CLTS = 1,然后在+警察= 0

将GSM模块时间手机网络的时间

等待5秒的时间将

在CUSD = 1

使USSD短信功能

 
  • 基于Arduino的GSM短信远程控制单元sim800手册
    下载

步骤8:微控制器

基于Arduino的GSM短信远程控制单元

微控制器是一个标准的atmega328p,相同的使用Arduino Uno。代码从而与两。为了便于在板编程,一个6编程头可在PC板。

该单元的不同部分连接微型处理器,并包括以下:

  • 四个数字输入
  • 四个数字输出
  • 振荡器
  • 两个指示灯
  • 复位电路
  • sim800l GSM模块

所有的通信和GSM模块进行了功能softwareserial()。这种方法被用来释放主串口Arduino IDE开发阶段。

只有2KB SRAM、EEPROM和1KB的,没有足够的内存来存储超过一对夫妇的用户可以连接到单元。自由的SRAM中,所有的用户信息在GSM SIM卡上存储。这样的安排,单位可以提供多达250个不同的用户。

该单元的配置数据存储在EEPROM中,从而将用户数据和系统数据相互。

还有几个备用的I / O引脚可用,但是,增加一个液晶显示器和/或键盘的选择是不可能的由于大量的SRAM的softwareserial()用于接收和发送缓冲区,

因为任何类型的单位用户界面的缺乏,所有的设置和用户使用短信程序。

 
  • 基于Arduino的GSM短信远程控制单元gsm_remote_sch.sch
    下载

步骤9:优化SRAM存储器

基于Arduino的GSM短信远程控制单元

在发展阶段比较早,Arduino IDE报低的SRAM存储器编译代码时。有几种方法来克服这一。

限制数据的串口接收

GSM模块将所有消息发送到微控制器的串口报告。当收到一些短信,收到的消息的总长度可以超过200个字符。这可以很快消耗掉所有的SRAM可在AtMega芯片,并且会导致稳定性问题。

为了避免这种情况,只有前200个字符的任何消息接收GSM模块将使用。下面的示例显示了如何通过计算接收到的字符变反了。

/ /扫描软件串口
 / ----------------------------------------------- 
 rxstring =“”数据;
反= 0;
而(sserial。available()){ 
延迟(1);/ /短时间延迟给新的数据放在缓冲区
 /得到新的特征
 RXCHAR =字符(sserial。read());
 /先添加200字符的字符串
如果(反<200){ 
 rxstring .concat(RXCHAR);
计数器计数器+ 1 =

减少print()编码序列。

虽然方便在开发过程中,Arduino串口监控,使用了大量的SRAM。代码是使用尽可能少的代码开发print()系列。代码一一个部分进行了测试工作,所有的序列。print()代码从代码的那一部分删除。

使用串口打印(F((“”))的代码

很多通常显示在Arduino串口监控信息更有意义,当描述添加。看看下面的例子:

串行out.println(“等待具体行动”);

字符串“等待具体行动”是固定的,不能改变的。

代码的编译时,编译器将包含字符串“在闪存等具体行动”。

此外,编译器认为该字符串是一个常数,由“串行使用。打印”或“打印指令序列。”。该微启动期间,这个常数也放置到SRAM存储器。

通过使用“F”前缀序列。print()功能,它告诉编译器该字符串在闪存是唯一可用的。在这个例子中,字符串包含28个字符。这是28个字节,可以释放在SRAM。

串行。println(F(“等待具体行动”));

这种方法也适用于softwareserial print()命令。作为GSM模块工作在命令代码包含众多softwareserial。打印(“XXXX”)命令。使用“F”前缀释放了近300字节的SRAM。

不使用硬件串口

经过调试,硬件串口的串口print()命令移除所有残疾人。这让一些额外的字节的SRAM。

没有任何序列。print()命令代码中的左,一个额外的128字节的SRAM是可用的。这是从代码中删除硬件串口完成。弗莱德的64位字节的发送64字节的接收缓冲区。

/ /串口。开始(9600);//硬件串行端口禁用

使用EEPROM的字符串

每个输入和输出,三弦需要拯救。他们的频道名,频道在字符串时,字符串当通道关闭。

共有8个I/O通道,他们将

  • 8字符串包含频道名称,每10个字符长
  • 8字符串包含描述的通道,每10个字符长
  • 8字符串包含信道下的描述,每10个字符长

这个广告多达240字节的SRAM。而不是存储这些字符串在SRAM,它们被存储在EEPROM。这释放了一个额外的240字节的SRAM。

宣布与正确的长度的字符串

变量通常是在开始的代码声明。一个常见的错误,当声明一个字符串变量,是我们不正确的字符数声明字符串。

字符串gsm_nr =“”;
字符串gsm_name =“”;
字符串gsm_msg =;

在启动过程中,微控制器将不在SRAM的这些变量分配内存。这可能导致不稳定的时候,这些字符串的使用。

为了防止这一点,声明字符串正确数量的字符的字符串将使用该软件。

字符串gsm_nr =“1000000000”;
字符串gsm_name =“2000000000”;
字符串gsm_msg =“;

注意,我没有申报的字符串相同的字符。如果你将这些字符串都说“1234567890”,编译器将在三变量相同的字符串,只分配足够的内存SRAM中的一个字符串。

步骤10:软件串口缓冲区大小

基于Arduino的GSM短信远程控制单元

在下面的代码中,你会发现,最多200个字符,可以从软件串口读。

/ /扫描软件串口
 / ----------------------------------------------- 
 rxstring =“”数据;
反= 0;
而(sserial。available()){ 
延迟(1);/ /短时间延迟给新的数据放在缓冲区
 /得到新的特征
 RXCHAR =字符(sserial。read());
 /先添加200字符的字符串
如果(反<200){ 
 rxstring .concat(RXCHAR);
计数器计数器+ 1 =
      
      (责任编辑:admin)
织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
相关文章
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片