数码之家

 找回密码
 立即注册
搜索
查看: 7925|回复: 70

[综合] STM8S单片机模拟ID卡(125khz)15卡合一,蓝牙连接安卓管理端/附全部源码

    [复制链接]
发表于 2025-1-21 10:40:46 | 显示全部楼层 |阅读模式
快过年了,公司还没有放假,也没有什么事情做,闲来无事把之前改进的ID模拟卡,详细细节发个帖子,常年潜水看贴,年终发帖给坛友当个乐子,闲言少叙,进入正题:


成品展示:





(TYPE-C的开孔方法也是跟论坛高人学的,我就说论坛能学到真东西)


从最初的原理验证老站发帖(http://bbs.mydigit.cn/read.php?tid=2144071) 到勉强能看,再到我觉得比较完善。这个玩具断断续续来说已经玩了差不多有8年了。
之前DIY的ID卡在也发过帖子详见:https://www.mydigit.cn/thread-272474-1-1.html


使用起来有如下缺点:
1、STM8S是没有断开电源的,处于休眠状态,单按键唤醒和切换卡号,长期使用起来的话电池一个星期左右就没有电了,偶尔STM8S唤不醒。
2、虽然可以一次存储多张ID卡,但是都是写死在程序里面的,不够灵活,如果要改,还需要改程序 编译下载 还需要下载器,自己玩玩可以,如果是一个产品的话 这些是致命的。
3、电路不够精简,有冗余器件。
4、ID卡天线问题,之前是拆其他门禁钥匙ID卡的天线,很细 容易断。


以上就是上一版的各种痛点,此次改进如下:
1、为了解决续航问题,将纽扣电池改为锂电池+TYPE-C充电,解决续航问题,单按键为总电源,按键按下 单片机就发ID卡号,5S后停止发送卡号,进入蓝牙模式。
2、为了解决正删改查卡号的问题:
A.不能写死在程序里,刚好STM8S有128个字节的EEPROM,程序运行后从EEPROM里面读取8字节的卡号,128字节做如下规划

STM8 EEPROM数据区



addr
1
2
3
4
5
6
7
8



0x4000
1
1
0x00
0x01
0
0
0
0

1
0x4008
FF
F5
20
00
FC
69
3C
D4
1号卡
2
0x4010











2号卡
3
0x4018











3号卡
4
0x4010











4号卡
5
0x4018











5号卡
6
0x4020











6号卡
7
0x4028











7号卡
8
0x4030











8号卡
9
0x4038











9号卡
10
0x4040











10号卡
11
0x4048











11号卡
12
0x4050











12号卡
13
0x4058











13号卡
14
0x4060











14号卡
15
0x4068











15号卡

前面8字节记录 第一字节记录当前使用的是第几张卡 第二字节是总共存储了几张卡 第三四字节记录卡槽位的占用情况,一bit代表一张卡,2字节16位最高位不用。剩余四字节暂时保留,余下的分别每8字节记录一张卡号。

B.接下来解决如何方面的对卡号进行正删改查,增加蓝牙透传芯片是一个不错的选择,最开始是用的nRF connect软件发送命令字节来操作,但用起来实在不方便,想着最好是能有个安卓软件。按几个按钮就能操作,于是研究了一下安卓软件怎么搞,发现这个APP Inventor(http://ai2.17coding.net/)这个是真不错,很方便的就能搞一个安卓程序,搭积木一样的编程,现在很多少儿编程中文编程都是用的这种方式,很简单。




3、为了解决天线问题,后面找了个小电机抽出里面的铜丝,随便绕了个10多圈就可以用了,解决了我的大问题。

由于还是习惯用AD加上对自己的库用的比较放心不用去验证,所以只能白漂捷配了,在此郑重感谢捷配(https://www.jiepei.com/)每个月一次免费打样机会,快递也给力发货后一天就到货了。


原理图和PCB







关键代码:
  1. #include "HAL/HAL.h"

  2. void BtStart()
  3. {   
  4.     digitalWrite_HIGH(PC4);
  5.    
  6.     Uart_Init();          //串口初始化   
  7.     TIM1_Cmd(DISABLE);
  8.     TIM2_Cmd(DISABLE);
  9.    
  10.     delay(300);
  11.    
  12.     BT_Init();
  13. }

  14. void Tim2_Init()
  15. {
  16.   TIM2->ARRH = (uint8_t)(1000 >> 8);
  17.   TIM2->ARRL = (uint8_t)(1000);
  18.   TIM2->PSCR = 0x04;
  19.   
  20.   TIM2->EGR = 0x01;
  21.   TIM2->SR1 = (~0x01);
  22.   TIM2->CR1 |= 0x01;
  23.   TIM2->IER |= 0x01;
  24. }


  25. uint16_t time;
  26. bool state = false;

  27. #pragma vector=0xF
  28. __interrupt void TIM2_UPD_OVF_BRK_IRQHandler(void)
  29. {
  30.      TIM2->SR1 = (~0x01);
  31.   
  32.      time++;
  33.      if(time > 4000)
  34.      {  
  35.         time = 0;
  36.         state = true;
  37.      }
  38. }

  39. void setup()
  40. {   
  41.     IDCard_Init();        //发送卡号
  42.     Tim2_Init();           //启动4S定时  
  43.     pinMode(PC4,OUTPUT);
  44.     digitalWrite_LOW(PC4);
  45. }

  46. void loop()
  47. {   
  48.   uint8_t packet[20];
  49.   uint8_t packetLen;
  50.   
  51.   if(state)
  52.   {
  53.     state = false;
  54.     BtStart();   
  55.   }
  56.   
  57.   if(Uart_ReceiveDataProcessing(packet,&packetLen) == 0)
  58.   {
  59.     dcapp_packet_parse(packet,packetLen);
  60.   }
  61. }


  62. int main(void)
  63. {
  64.   /*设置内部高速时钟16M为主时钟*/
  65.    CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);
  66.   /* millis()函数使用的定时器提供时钟节拍 */
  67.   Delay_Init();
  68.   
  69.   setup();
  70.   for(;;)loop();
  71. }


复制代码
程序和PCB 以及APP Inventor源码 蓝牙插件 自己写的ID卡10位卡号转曼切斯特 码插件,以及安卓APP


通过百度网盘分享的文件:IDCard
链接:https://pan.baidu.com/s/1LIfuXt6i8WNASkg82exxKw?pwd=atqy
提取码:atqy


注意:由于我用的蓝牙芯片是不具有通用性 程序原理图以及APP不能全部照搬,可改用其他蓝牙透传的芯片,程序稍加修改就可以。




下期预告:桌面时钟







下期更精彩 尽请期待!!!


本帖子中包含更多资源

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

x

打赏

参与人数 16家元 +422 收起 理由
fm007 + 30 謝謝分享
momololo + 7 優秀文章
liutlk + 17 優秀文章
jpdd521 + 30 做的不错,再接再厉。
杨小伟 + 30 謝謝分享
springvirus + 30 大咖作品!!
aping365 + 30 優秀文章
kkdkj + 30 謝謝分享
wgm468 + 30 謝謝分享
azzajazz + 30

查看全部打赏

发表于 2025-1-21 11:07:44 | 显示全部楼层
最后一图风扇是亮点,4合一吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-1-21 11:10:50 来自手机浏览器 | 显示全部楼层
bennanhaier 发表于 2025-1-21 11:07
最后一图风扇是亮点,4合一吗?

眼神真厉害 确实是4合一 早年单片机练手时做了 也用了好些年了
回复 支持 反对

使用道具 举报

发表于 2025-1-21 12:35:51 | 显示全部楼层
这么个软硬全能的高手怎么能一直潜着呢!羡慕又会编程动手能力又强的高手,要不是看到那一捆天线还以为是商品化产品呢
回复 支持 反对

使用道具 举报

发表于 2025-1-21 12:51:57 | 显示全部楼层
秒评精华啊 收藏慢慢看
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-1-21 12:57:56 来自手机浏览器 | 显示全部楼层
weln2016 发表于 2025-1-21 12:51
秒评精华啊 收藏慢慢看

我也是好起来了,潜水这么多年,竟然能发精华。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-1-21 12:58:38 来自手机浏览器 | 显示全部楼层
微醉 发表于 2025-1-21 12:35
这么个软硬全能的高手怎么能一直潜着呢!羡慕又会编程动手能力又强的高手,要不是看到那一捆天线还以为是商 ...

业余爱好,解决自身需求
回复 支持 反对

使用道具 举报

发表于 2025-1-21 13:24:59 | 显示全部楼层
技术不 错,做出来的很实 用
回复 支持 反对

使用道具 举报

发表于 2025-1-21 13:27:25 来自手机浏览器 | 显示全部楼层
会打板的,都是高手
回复 支持 反对

使用道具 举报

发表于 2025-1-21 13:37:58 | 显示全部楼层
软硬件通吃,楼主很牛X
回复 支持 反对

使用道具 举报

发表于 2025-1-21 13:55:43 来自手机浏览器 | 显示全部楼层
软硬件通吃,能设计、制作出高大尚电子实用产品
回复 支持 反对

使用道具 举报

发表于 2025-1-21 16:12:08 | 显示全部楼层
谢谢分享~这个真的太厉害了
回复 支持 反对

使用道具 举报

发表于 2025-1-21 16:53:25 来自手机浏览器 | 显示全部楼层
本帖最后由 jxf269 于 2025-1-21 16:56 编辑

若是用这种大夏龙雀ESP32-C2开发板物联网WiFi蓝牙二合一模块二次开发8684,行么,毕竟现在有首单1元的样品,天猫APP用福气兑换1元红包就是0元撸了。上次几毛钱的没分享,我挺后悔的。
回复 支持 反对

使用道具 举报

发表于 2025-1-21 16:58:19 | 显示全部楼层
这个确实不错,赞两个
另外请教楼主,网盘里给的edu.mit.appinventor.ble-20200828.aix,文件在http://ai2.17coding.net/里无法导入啊?只能导入aia文件,我改了后缀,导入也没反应。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-1-21 17:26:20 | 显示全部楼层
kindzhon 发表于 2025-1-21 16:58
这个确实不错,赞两个
另外请教楼主,网盘里给的edu.mit.appinventor.ble-20200828.aix,文 ...

哦 我漏传了一个 你在到网盘里找后缀.aia的文件就可以那个就是源码工程了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-1-21 17:27:34 | 显示全部楼层
kindzhon 发表于 2025-1-21 16:58
这个确实不错,赞两个
另外请教楼主,网盘里给的edu.mit.appinventor.ble-20200828.aix,文 ...

用什么单片机都可以 是需要一个定时器然后分频就可以。我是手头刚好有很多STM8S
回复 支持 反对

使用道具 举报

发表于 2025-1-21 17:37:53 来自手机浏览器 | 显示全部楼层
不明觉厉,成品很小巧
回复 支持 反对

使用道具 举报

发表于 2025-1-21 17:53:43 | 显示全部楼层
wuyaozi 发表于 2025-1-21 17:26
哦 我漏传了一个 你在到网盘里找后缀.aia的文件就可以那个就是源码工程了 ...

谢谢,导入了,仔细学习中。。。
回复 支持 反对

使用道具 举报

发表于 2025-1-21 18:12:50 | 显示全部楼层
看不懂还是支持
回复 支持 反对

使用道具 举报

发表于 2025-1-21 19:00:51 来自手机浏览器 | 显示全部楼层
帖子没说,如何把公司门禁或者住宅单元门门禁ID卡读出,是借助其他工具吗?其次,N合1后,刷卡时还需要选择吗?还是这case依次所有ID都尝试?
回复 支持 反对

使用道具 举报

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-2-16 17:31 , Processed in 0.156000 second(s), 10 queries , Redis On.

Powered by Discuz!

© 2006-2023 smzj.net

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