查看: 4650|回复: 6

RDM8800+SIM900实现 刷NFC卡短信提示

[复制链接]
  • TA的每日心情
    擦汗
    2014-7-18 09:38
  • 签到天数: 6 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2014-7-25 15:58:06 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 ITEAD创易工作室 于 2014-7-25 16:00 编辑

    RDM8800是一款能读写13.56Mhz NFC RFID卡的单片机,串口直接输出,体积小巧,性能稳定。兼容arduino,我们可以像使用arduino一样修改它的固件来实现我们想要的功能。

    今天教小伙伴使用RDM8800烧写程序来实现刷NFC卡,把卡号通过短信发送到手机上。

    需要使用到的配件有:

    peijiann.jpg

    首先下载RDM8800的硬件补丁包和库文件:http://pan.baidu.com/s/1jG63c7k

    下载完成后把每个压缩包都解压出来,将Iteaduino_Lite文件夹放到你的Arduino IDE安装目录下的hardware 文件夹里面,把PN532_SPI文件夹放到你的Arduino IDE安装目录下的libraries 文件夹里面。

    注意:新的硬件驱动和库文件需要在IDE下次运行时生效,所以在操作上面这一步的时候请关闭arduino IDE软件。

    接下来,我们需要给RDM8800烧写固件。按照下面的硬件连接图来连接FOCA转串板和RDM8800。注意:FOCA转串板的开关要打到5V。详细引脚定义请查阅datasheet和原理图。

    FOCA RDM8800.jpg

    使用USB mini接口的数据线将FOCA转串板连接到电脑上,开始烧写以下代码:
    1. /******************** RDM8800 *************************
    2. RDM8800 sends the ID number by HEX.
    3. eg.
    4. ID num                     output(10 bits)
    5. 46553491     0x30 0x30 0x34 0x36 0x35 0x35 0x33 0x34 0x39 0x31 (0x0D 0x0A)
    6. ************************************************************/
    7. #include <PN532.h>
    8. #include <SPI.h>
    9. #define delaytime 2000
    10. #define timeout1 5000
    11. #define timeout2 7000
    12. char number[20] = "123456789";   //改成接收短信的手机号码
    13. byte comm_buf[20];
    14. const int LED = 3;
    15. #define PN532_CS 10
    16. PN532 nfc(PN532_CS);
    17. //#define  NFC_DEMO_DEBUG 1
    18. unsigned int frame_format;

    19. unsigned char id_buffer[10];
    20. uint32_t old_id;
    21. unsigned long lasttime=0;
    22. unsigned long prev_time=0;
    23. unsigned char r_buffer[30];

    24. void setup(void) {
    25.   Serial.begin(9600);
    26.   nfc.begin();
    27.   nfc.SAMConfig();

    28.   pinMode(LED,OUTPUT);
    29.   digitalWrite(LED,HIGH);
    30.   delay(1000);
    31.   digitalWrite(LED,LOW);
    32.   delay(10000);

    33.     lasttime = millis();
    34. }

    35. void loop(void) {
    36.   uint32_t id;
    37.   // look for MiFare type cards
    38.   id = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A);

    39.        if (id != 0)
    40.        {
    41.            if(old_id != id)
    42.            {
    43.               old_id = id;
    44.                hex_to_dec(id);
    45.               while(Serial.available())
    46.                   Serial.read();                 
    47.               Serial.println("AT+CMGF=1");
    48.                 prev_time = millis();
    49.               int a=0;
    50.               while((millis() - prev_time)<timeout1)
    51.               {
    52.                   if(Serial.available())
    53.                   {
    54.                     
    55.                      r_buffer[a++]=Serial.read();
    56.                     
    57.                      if(strstr((char *)r_buffer, "OK"))
    58.                          break;
    59.                  
    60.                   }
    61.                  
    62.                  
    63.               }
    64.               Serial.print("AT+CMGS="");
    65.               Serial.print(number);
    66.               Serial.println(""");
    67.               prev_time = millis();
    68.               a=0;
    69.               while((millis() - prev_time)<timeout2)
    70.               {
    71.                   if(Serial.available())
    72.                   {
    73.                     
    74.                      r_buffer[a++]=Serial.read();
    75.                     
    76.                      if(strstr((char *)r_buffer, ">"))
    77.                          break;
    78.                  
    79.                   }
    80.                  
    81.                  
    82.               }
    83.               Serial.print("card: ");
    84.               for(unsigned char i=0;i<10;i++)
    85.               {
    86.                   Serial.write(id_buffer[i]);
    87.               }
    88.               char buf_end[2];
    89.               buf_end[0]=0x1a;
    90.               buf_end[1]='\0';
    91.               Serial.println(buf_end);
    92.               prev_time = millis();
    93.               a=0;
    94.               while((millis() - prev_time)<timeout2)
    95.               {
    96.                   if(Serial.available())
    97.                   {
    98.                     
    99.                      r_buffer[a++]=Serial.read();
    100.                     
    101.                      if(strstr((char *)r_buffer, "OK"))
    102.                          break;
    103.                  
    104.                   }
    105.                  
    106.                  
    107.               }
    108.                
    109.          
    110.            }

    111.               lasttime = millis();
    112.          

    113.        }
    114.       
    115.        if(millis() - lasttime > delaytime)
    116.        {
    117.            lasttime = millis();
    118.            old_id=0;

    119.        }
    120.    
    121. }

    122. void hex_to_dec(uint32_t value)
    123. {
    124.     id_buffer[0] = 0x30 + value / 1000000000;
    125.     id_buffer[1] = 0x30 + value % 1000000000 / 100000000;
    126.     id_buffer[2] = 0x30 + value % 100000000 / 10000000;
    127.     id_buffer[3] = 0x30 + value % 10000000 / 1000000;
    128.     id_buffer[4] = 0x30 + value % 1000000 / 100000;
    129.     id_buffer[5] = 0x30 + value % 100000 / 10000;
    130.     id_buffer[6] = 0x30 + value % 10000 / 1000;
    131.     id_buffer[7] = 0x30 + value % 1000 / 100;
    132.     id_buffer[8] = 0x30 + value % 100 / 10;
    133.     id_buffer[9] = 0x30 + value % 10;
    134. }
    复制代码
    烧写的时候选择“board板子类型:Iteaduino_Lite”,然后选择相应的串口。

    QQ图片20140725150406.jpg

    点击upload,提示烧写成功,RDM8800的固件就烧好了。

    接下来是测试,拔掉电源线和所有杜邦线,按照下面的硬件连接图来连接FOCA,RDM8800和SIM900模块。

    RDM8800 SIM900.jpg

    给SIM900模块装上SIM卡(仅支持联通/移动sim卡)和天线,把NFC的天线板连接到RDM8800的接口上,然后插上USB线供电。实物如下图:

    真实图.jpg

    上电后,SIM900开机,看到NET LED灯开始闪烁时,等待10s。然后把NFC typeA卡放到RDM8800的天线板上,这时RDM8800会把读到的卡号发送到对应的手机上,例如: “card:0046553491” 。输出格式为“card: +卡号”。

    卡一直放在天线板上只读一次,只发一次短信,同一张卡需要隔2秒后才能刷第二次并发送短信,不同的卡号无需等待。

    此处的FOCA仅是用于供电,你也可以使用5V/1A适配器或者电池供电。

    回复

    使用道具 举报

  • TA的每日心情
    开心
    2014-9-23 05:09
  • 签到天数: 113 天

    连续签到: 1 天

    [LV.6]常住居民II

    发表于 2014-7-25 17:03:59 | 显示全部楼层
    看你做好像不难,学习了,感谢!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2014-7-18 09:38
  • 签到天数: 6 天

    连续签到: 1 天

    [LV.2]偶尔看看I

     楼主| 发表于 2014-7-26 09:10:30 | 显示全部楼层
    heelary 发表于 2014-7-25 17:03
    看你做好像不难,学习了,感谢!

    硬件上很简单的,代码方面仅供参考,可以改成其他功能哦,比如打电话、刷卡上电的酒店系统等等。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2014-9-23 05:09
  • 签到天数: 113 天

    连续签到: 1 天

    [LV.6]常住居民II

    发表于 2014-7-26 10:31:37 | 显示全部楼层
    谢谢分享。正在凑板子。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2018-8-29 20:40
  • 签到天数: 1341 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2014-7-28 21:40:52 | 显示全部楼层
    ITEAD创易工作室 发表于 2014-7-28 09:41
    可以查看我的资料联系方式哦、

    这是要400的节奏啊!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-11-26 00:41 , Processed in 0.167180 second(s), 23 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.