极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 47398|回复: 19

Arduino与Stronglink SL018 RFID模块

[复制链接]
发表于 2013-4-14 12:49:58 | 显示全部楼层 |阅读模式
本帖最后由 smching 于 2013-10-3 21:58 编辑

眾多RFID模块中,Stronglink SL018是我找到最便宜的模块且支持读取及写入。SL018 使用了I2C接口(只使用两条信号线)与外界沟通,支持的RFID卡包括MIFARE Classic 1K, MIFARE Classic 4K 和 MIFARE Ultralight,频率则是13.56MHz。以下是SL018规则说明:
Model
MIFARE Module SL018
Frequency
13.56MHz
Protocol
ISO14443A
Tag supported
Ultralight, NTAG203, MIFARE Mini, MIFARE Classic 1K, MIFARE Classic 4K, FM11RF08
Interface
I2C
Supply voltage
4.4 - 7.0VDC
Dimension
65 × 45 mm
由于Marc Boon已经编写好了SL018用于 Arduino 程序库(Library)Arduino与SL018进行沟通将会变得非常的容易,只须几行代码,就能读取RFID卡的UID了。



测试Stronglink SL018
测试SL018是否正常工作可以说是非常的简单,只要供电5V至SL018模块就行了,当然这不包括测试I2C接口。


  • +5V及Gnd分别连接Pin4和Pin5,然後通电
  • 当SL018侦察到MIFARE RFID卡,L3 LED将会转亮
  • 对地(Gnd)测量Pin1(TAG),将会得到3V
  • 将MIFARE RFID卡移开,L3 LED又熄了
简单的说,如果不需要认证,只使用一片SL018模块,通Pin1(TAG)输出,就可以控制电子设备了。


安装SL018程序库
  • 下载SL018程序库,此程序库也支持SL030 RFID模块
  • 解压ZIP文件(RFIDuino-master.zip)
  • 只需要SL018文件夹,将之拷贝到 arduino的libraries文件夹,如图:


  • 打开arduino软件
  • 单击File>Examples>SL018,看到SL018例子(如图表示安装成功



上载(Upload)Sketch至Arduino
SL018程序库自带了示范例子,用此例子上载至Arduino来测试最好不过了。
  • 将Arduino连接至电脑
  • 打开arduino软件
  • 单击File>Examples>SL018>UID,是的,就用UID为例子吧!
#include
#include
SL018 rfid;
int led = 13;

void setup()
{
  pinMode(led, OUTPUT);
  Wire.begin();
  Serial.begin(19200);
  Serial.println("Show me your tag");   // prompt for tag
}

void loop()
{
  rfid.seekTag();   // start seek mode
  while(!rfid.available());   // wait until tag detected
  Serial.println(rfid.getTagString());  // print tag id
}
把上面的例子上载至Arduino後,可以与SL018沟通了。代码是不是很简单?


SL018模块与Arduino连接
SL018的Pin1,Pin2(SDA)Pin3(SLC),分别连接至Arduino的A3,A4及A5
SL018
Arduino
1(TAG)
A3 (Analog 3)
2 (SDA)
A4 (Analog 4)
3 (SLC)
A5 (Analog 5)
4 (VCC)
VCC
5 (GND)
GND



SL018模块与Arduino沟通
这里我们使用Arduino软件自带的串口监视器(Serial Monitor)来监视与测试
  • 根据以上方式,连接SL018至Arduino
  • 打开Arduino软件,然後运行Serial Monitor
  • 当SL018侦察到MIFARE RFID卡,L3 LED将会转亮,同时Serial Monitor将显示此RFID卡的UID,如图:




认证开关
改进上面的代码,形成了需要认证後才能决定开与关。以下代码使用RFID认证通过後LED会亮,三秒后将会自动熄。
#include
#include
SL018 rfid;
int led = 13;  // Pin 13 has an LED connected on most Arduino boards
String cardUID;

void setup()
{
  pinMode(led, OUTPUT);  // initialize the digital pin as an output.
  Wire.begin();
  Serial.begin(19200);
  Serial.println("Show me your tag"); // prompt for tag
}
void loop()
{

  rfid.seekTag();  // start seek mode
  
  while(!rfid.available());  // wait until tag detected

  cardUID = rfid.getTagString();
  Serial.println( cardUID);  // print tag id
  if ( cardUID == "0467CB11E20280") {
     digitalWrite(led, HIGH);   // turn the LED on
     delay(3000);  //wait for 3 seconds
     digitalWrite(led, LOW);   // turn the LED off
  }
}



RFID读取与写入示范
接下来是一个比较复杂的示范,功能包括:

  • 读取UID
  • 读取RF卡内的全部信息
  • 写入两字节(2 Bytes)至RF卡

这里使用由SL018程序库自带的sl018demo例子作示范,同样的使用Serial Monitor来监视与测试,baud rate必须设成19200。一切就绪后,开始测试了:

在Serial Monitor输入?将会显示所有令,如图


a 命指令
是一个切换指令,当Auto read on时,只要 SL018侦察到RF卡在範围内,将会自动读取UID(s 指令)和列出RF卡的全部信息(r 指令)


d 指令
是一个切换指令,用于调试。当Debug on时,Serial Monitor将列出执行指令以及由SL018获得的信息


s 指令
读取与列出RF卡的UID



r 指令
读取与列出RF卡的全部信息



w 指令
写入两个字节



来源:http://ediy.com.my/index.php/2012-10-21-15-15-03/item/63-arduino与stronglink-sl018-rfid模块
[url=]By SM Ching[/url]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2013-4-14 17:54:54 | 显示全部楼层
现在RFID模块确实越来越便宜了,40元不到的价格
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-4-14 22:03:23 | 显示全部楼层
MicroCao 发表于 2013-4-14 17:54
现在RFID模块确实越来越便宜了,40元不到的价格

Parallax RFID 也很多人用,但是价钱不便宜呀

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-4-16 17:18:50 | 显示全部楼层
125 kHz,Parallax RFID 属于EM4000家族
只能读,不能写
回复 支持 反对

使用道具 举报

发表于 2013-5-28 16:27:45 | 显示全部楼层
距离太短了吧!~~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-28 18:58:17 | 显示全部楼层
~搏击长空 发表于 2013-5-28 16:27
距离太短了吧!~~

13.56MHz适合用在短距离,比如防盗门,通常小于10cm。
远距离建议使用125 kHz
回复 支持 反对

使用道具 举报

发表于 2013-5-29 16:33:59 | 显示全部楼层
smching 发表于 2013-5-28 18:58
13.56MHz适合用在短距离,比如防盗门,通常小于10cm。
远距离建议使用125 kHz

你说的这个价位多少?能读写吗?·····
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-30 20:47:24 | 显示全部楼层
~搏击长空 发表于 2013-5-29 16:33
你说的这个价位多少?能读写吗?·····

你是指13.56MH还是125KHz?

Stronglink SL018与SL030都支持读写。更多资料请看浏览
http://www.stronglink-rfid.com/en/rfid-modules.html
回复 支持 反对

使用道具 举报

发表于 2013-6-8 19:46:14 | 显示全部楼层
smching 发表于 2013-5-30 20:47
你是指13.56MH还是125KHz?

Stronglink SL018与SL030都支持读写。更多资料请看浏览

大神,能给推荐一款可以远距离的读RFID的读卡器吗?·····尽量与Arduino兼容
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-9 11:15:57 | 显示全部楼层
~搏击长空 发表于 2013-6-8 19:46
大神,能给推荐一款可以远距离的读RFID的读卡器吗?·····尽量与Arduino兼容

Cottonwood: Long Range UHF RFID reader UART

范围:1-6米
接口: TTL Uart (RS232)
天线:5dBi or 8dBi directional antenna


  1. <!-- saved from url=(0063)[url=http://junetrading.com/soliddigi.com/upload/file/1309425930.pde]http://junetrading.com/soliddigi.com/upload/file/1309425930.pde[/url] -->
  2. <html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">


  3. #include "WProgram.h"
  4. #include <NewSoftSerial.h>
  5. #include <string.h>         //Used for string manipulations

  6. //global
  7. int ledPin = 13;            // LED connected to digital pin 13
  8. unsigned char  incomingByte;
  9. #define BYTE unsigned char

  10.    

  11. //software serial debug_uart
  12. #define RXPIN 3//software  serial
  13. #define TXPIN 4
  14. NewSoftSerial  Debug_uart(RXPIN,TXPIN);  
  15. //Create a 'fake' serial port. Pin 2 is the Rx pin, pin 3 is the Tx pin.
  16. //SoftwareSerial Debug_uart(3,4);//d3 int 1 as rx pin,d3 t0 as tx pin;
  17. #define DEBUG_TXBUF_SIZE 64
  18. #define DEBUG_RXBUF_SIZE 64
  19. enum command{hardware=0xf0,software,ssid};
  20. BYTE command_hardware[]={0x10,0x03,0x01};//const
  21. BYTE command_software[]={0x10,0x03,0x00};//const
  22. BYTE command_ssid[]={0x43,0x04,0x01,0xcd};//const
  23. static BYTE  debug_txbuf[DEBUG_TXBUF_SIZE];
  24. static BYTE debug_txbuf_read=0;
  25. static BYTE debug_txbuf_write=0;
  26. //
  27. static BYTE debug_rxbuf[DEBUG_RXBUF_SIZE];
  28. static BYTE debug_rxbuf_read=0;
  29. static BYTE debug_rxbuf_write=0;
  30. //
  31. //treat serial_uart
  32. #define serial_RXBUF_SIZE  64
  33. #define serial_TXBUF_SIZE  64
  34. static BYTE serial_rxbuf[serial_RXBUF_SIZE];
  35. static BYTE serial_rxbuf_read=0;
  36. static BYTE serial_rxbuf_write=0;
  37. //static BYTE gprs_rxbuf_lineWrite;
  38. //
  39. static BYTE  serial_txbuf[serial_TXBUF_SIZE];
  40. static BYTE serial_txbuf_read=0;
  41. static BYTE serial_txbuf_write=0;
  42. static unsigned char debug_rxBuf_Read( unsigned char *data)
  43. {
  44.     if(debug_rxbuf_read == debug_rxbuf_write)
  45.         return 0;
  46.         *data = debug_rxbuf[debug_rxbuf_read++];
  47.         debug_rxbuf_read %= DEBUG_RXBUF_SIZE;
  48.         return 1;
  49. }
  50. extern unsigned char  debug_rxBuf_readline(unsigned char *buf)
  51. {  
  52.     unsigned char len;
  53.     for( len=0;;len++)
  54.         {
  55.          if(0==debug_rxBuf_Read(&buf[len]))
  56.          break;
  57.         }
  58.         //buf[len]='\0';
  59.         return len;
  60. }
  61. static void debug_rxBuf_Write(unsigned char  *Buf,int len)
  62. {
  63.         for(int i=0;i<len;i++)
  64.         {        
  65.           debug_rxbuf[debug_rxbuf_write]=Buf[0];//Buf[i];
  66.           debug_rxbuf_write++;
  67.           debug_rxbuf_write %=DEBUG_RXBUF_SIZE;
  68.         }
  69. }
  70. static void debug_SendData(unsigned char *P,unsigned char DataLength)
  71. {
  72.    Debug_uart.print(*P);
  73. }
  74. static        void debug_Send_bytes(void)
  75. {
  76. while(debug_txbuf_read != debug_txbuf_write)
  77. {
  78. if(debug_txbuf_read < debug_txbuf_write  )
  79.     {
  80.    debug_SendData(&debug_txbuf[debug_txbuf_read],1);
  81.    debug_txbuf_read++;
  82.    debug_txbuf_read %= DEBUG_TXBUF_SIZE;
  83.     }
  84.   if(debug_txbuf_read > debug_txbuf_write)
  85.    {
  86.    debug_SendData(&debug_txbuf[debug_txbuf_read],1);
  87.    debug_txbuf_read++;
  88.    debug_txbuf_read %= DEBUG_TXBUF_SIZE;
  89.    }
  90.   }
  91. }
  92. extern void debug_write_txbuf( unsigned char *pcmd, unsigned char len)
  93. {
  94.   for(int n=0;n<len;n++)
  95.   {
  96.     debug_txbuf[debug_txbuf_write] = pcmd[n];

  97.        debug_txbuf_write++;
  98.            debug_txbuf_write %= DEBUG_TXBUF_SIZE;
  99.   }
  100.   debug_Send_bytes();//start TX BYTES
  101. }

  102. //
  103. static void serial_rxBuf_Write(unsigned char *Buf,int len)
  104. {
  105.         for(int i=0;i<len;i++)
  106.         {
  107.           serial_rxbuf[serial_rxbuf_write]=Buf[i];         
  108.           serial_rxbuf_write++;
  109.         serial_rxbuf_write %=serial_RXBUF_SIZE;
  110.         }
  111. }
  112. extern void serial_rxBuf_lineWrite(void)
  113. {
  114. //
  115.   unsigned char tempbyte = 0xff;
  116.     while(1)
  117.     {
  118.       incomingByte = Serial.read();
  119.       if(incomingByte == 0xff)
  120.       {  
  121.           incomingByte = Serial.read();
  122.          if(incomingByte == 0xff)
  123.           {         
  124.            break;
  125.           }
  126.        else
  127.          {
  128.           serial_rxBuf_Write(&tempbyte,1);//save 0xff;dont discard
  129.           serial_rxBuf_Write(&incomingByte,1);   
  130.          }
  131.             
  132.       }
  133.       else
  134.       serial_rxBuf_Write(&incomingByte,1);
  135.     }
  136. }
  137. static  unsigned char serial_rxBuf_Read( unsigned char *data)
  138. {   
  139.    if(serial_rxbuf_read == serial_rxbuf_write)
  140.         return 0;
  141.         *data = serial_rxbuf[serial_rxbuf_read++];
  142.         serial_rxbuf_read %= serial_RXBUF_SIZE;
  143.         return 1;
  144. }
  145. extern unsigned char serial_rxBuf_readline(unsigned char *buf)
  146. {

  147.      BYTE len;
  148.     for( len=0;;len++)
  149.         {
  150.                if(0==serial_rxBuf_Read(&buf[len]))
  151.              break;                 
  152.         }
  153.         //buf[len]='\0';
  154.         return len;
  155. }
  156. static void serial_Send_bytes(void)
  157. {

  158. while(serial_txbuf_read != serial_txbuf_write  )
  159.   {  
  160.    Serial.print(serial_txbuf[serial_txbuf_read]);
  161.    serial_txbuf_read++;
  162.    serial_txbuf_read %= serial_TXBUF_SIZE;   
  163.   }
  164.   
  165. }
  166. extern void serial_write_txbuf(unsigned char *pcmd,unsigned char len)
  167. {
  168.   for(int n=0;n<len;n++)
  169.   {
  170.     serial_txbuf[serial_txbuf_write] = pcmd[n];
  171.      serial_txbuf_write++;
  172.      serial_txbuf_write %= serial_TXBUF_SIZE;
  173.   }
  174.   serial_Send_bytes();
  175. }
  176. void setup()                    // run once, when the sketch starts
  177. {
  178.   delay(200);   //wait for v is 5v
  179.   pinMode(ledPin, OUTPUT);      // sets the digital pin as output
  180.   pinMode(TXPIN, OUTPUT);      // sets the digital pin as output
  181.   Serial.begin(115200);
  182.   Debug_uart.begin(4800);
  183. }

  184. void loop()                     // run over and over again
  185. {

  186. while(Debug_uart.available())
  187. {
  188.    incomingByte = Debug_uart.read();
  189.    debug_rxBuf_Write(&incomingByte ,1);//only one byte lwm
  190. }
  191. unsigned char tempbuf[64];
  192. unsigned char templength;
  193. templength=debug_rxBuf_readline(tempbuf);
  194. serial_write_txbuf(tempbuf,templength);
  195. delay(1000);//wait for corresend
  196. if (Serial.available() > 0)
  197.     {

  198.     serial_rxBuf_lineWrite();   
  199.     }

  200.    templength=serial_rxBuf_readline(tempbuf);
  201.    debug_write_txbuf(tempbuf,templength);


  202.   digitalWrite(ledPin, HIGH);   // sets the LED on//lwm

  203.   delay(100);           // waits for a second former 1000 lwm

  204.   digitalWrite(ledPin, LOW);    // sets the LED off

  205.   delay(100);           // waits for a second former 1000 lwm

  206. }

  207. </pre></body></html>
复制代码


我没用过此RFID

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2013-6-13 18:19:47 | 显示全部楼层
smching 发表于 2013-6-9 11:15
Cottonwood: Long Range UHF RFID reader UART

范围:1-6米

  好贵呀。我们就有1600的资本。再买点RFID标签,不知道还够不够!~~
回复 支持 反对

使用道具 举报

发表于 2013-9-12 11:24:00 | 显示全部楼层
你好,能发一份SL018的程序库给我吗?  [email protected]
回复 支持 反对

使用道具 举报

发表于 2013-9-15 13:39:17 | 显示全部楼层
求详细资料
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-10-3 22:01:19 | 显示全部楼层
千积木 发表于 2013-9-12 11:24
你好,能发一份SL018的程序库给我吗?

不好意思,漏放了下载连接。我已经更改了。顺便在这里放一个
https://nodeload.github.com/marcboon/RFIDuino/zip/master
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-10-3 22:02:31 | 显示全部楼层
HeartRain 发表于 2013-9-15 13:39
求详细资料

你想要什么资料?
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-5-3 13:01 , Processed in 0.048097 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表