公告:新满多没有杂乱广告的网站, 请大家收藏!很好记,域名是 新满多 拼音!xinmanduo.com ! 更简洁好记的 ykyh.net

您的当前位置:首页 > 科技小制作 > 正文 -- 手机或者平板访问

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

来源:未知 编辑:晚一步 时间:2018-05-28

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

工作原理

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

步骤7:sim800l模块

sim800l模块

本单元的核心是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短信功能

     
    • sim800手册sim800手册 下载

      步骤8:微控制器

      微控制器

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

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

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

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

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

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

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

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

         
        • gsm_remote_sch.schgsm_remote_sch.sch 下载

          步骤9:优化SRAM存储器

          优化的SRAM存储器

          在发展阶段比较早,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:软件串口缓冲区大小

            Serial Buffer Size软件

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

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

分享创意到朋友圈

网友评论:



Copyright © 2006-2017 新满多 备案:渝ICP备11004546号-1

网站内容来自随意自动采集,如有侵犯没有标注出处,请联系我们删除:Gaocheng365@live.com

Top