zoukankan      html  css  js  c++  java
  • "CC1101 无线自动组网成功"---amoBBS

     基于RF CC1101 无线自动组网成功  +ATMEGA8
       暗爽:    因为程序是用的公司产品上的,所以暂时不好公开,所以只能暗爽了。
       因为介绍的比较多,但还是得慢慢介绍下,因为今天没带数码相机,实物图在随后的日子里贴出来
       Introduce:
                1、基于RF CC1101 868Mhz(因为产品主要出口到欧洲,所以用868M 当然在中国一般就用434M 或315M了)
                2、一个主站(向是一个无线路由器,当然它还要与上位机通讯,因为无线模块只是工具,我们还需要它来为我们的防盗系统传递数据)
                   +30个从站(这里的30个从站只是现在刚开始使用,最多的话可以带255个从站)
                3、所有主站的的物理地址始终为 0x00 0x00 0x00 0x00 从站的物理地址不为主站的物理地址的所有4个字节的物理地址 
                4、所有的主站的地址始终为0x00, 从机的地址是有主机根据从机的物理地址来自由分配的,当然如果主机保持通电状态,如果某台从机在分
                   配了一个ID号后,又断电, 然后在重启后,主机会在物理地址库中寻找这个从机的物理地址,如果找到,就给这台从机分配掉电前的ID
                   如果为新的物理地址,也就是来了个陌生的物理地址,就给它分配一个新的ID号
                5、程序为主站和从站建立了一个128个字节的接收缓冲区,因为发送的话,需要等待发送完了在发送下一组数据,所以发送就没给它建立缓冲区
                6、通讯格式:上位机到 主站(232串口) 、主站到从站(RF CC1101) ,从站到系统的 所有传输数据格式为 
                   开始字符 + 地址 +类型+RSVD(保留字节,为以后可能用到 而保留一个字节)+命令 +数据
                7、无线自动组网主要是依靠CC1101自带的 载波感应 来做的,当检测到外界有信号的时候就查询,最多查询500ms,如果500ms以内外界都有
                   信号就发送失败,如果在500ms发现外界没有信号,就立马发送出去
                8、注意:主站在没次上电 的时候需要发送命令,让从站将自己的ID号清零,然后重新向主站请求一个ID号,这样做是ID号是随机分配的,
                   如果从站不将自己的ID号清0,重新索要ID号,主站不去查询当前要分配的ID号是否在从站中已经存在,那么这里会有个数据冲突问题。
                9、从机是怎么得到自己的ID号:
                      从机在每次上电后,将自己的ID号清0,这样就可以接收到主站的所有命令,当然如果接收到数据后,从站是不会回复,除非从站接收到
                   主站分配的ID号的命令,且分配ID号带的MAC 地址与自己匹配,这样才会回复数据。
                      当从机的ID号为0时,从机会自动   随机   延时(当然这里的延时不是只做延时,而是用定时器来做的延时),然后检测外界是否有信号
                   如果外界没有信号,就发送自身的MAC(每台系统的MAC地址都是  唯一  ,这个MAC地址是需要产品出厂的时候我们来设置的,客户是不可
                   以更改的)地址发送到主站,如果主站忙则忽略掉这台系统的请求,从机会在随机延时后再发送自己的MAC地址到主站。当主站闲的时候
                   回响应这台系统的请求,在这里主站会告诉全网停止所有的发送请求,然后发送这台系统的MAC +主站分配的ID号给从机,当然所有从机都
                   会收到此命令,因为用的是广播方式,但是除了MAC地址匹配者才对这条指令响应,然后回复成功,主站收到成功后,会将此从站系统的
                   信息MAC+ID号,存储起来,主要用于当上位机要的时候发送到上位机,然后上位机根据MAC来起“别名”,根据ID号来发送数据,这样就
                   比较人性化(傻瓜化),如果出现以外 主站在发送3次后都没有收到从站的回复,那么就丢失这台系统的请求,然后恢复全网可以继续发
                   送 数 据 到主站。这样就可以搜索到下面所有的系统的 然后分配一个ID号, 
                   从测试结果来看,因为超时用的是200ms 所以计算大概主站分配一个ID号 最快需要1S 左右,慢的话 要挂的从站的个数,个数越多的话,
                   时间越长,大概需要挂满最快需要30s  慢的话基本在40S左右。
                10、当然从机的任务很重哦:
                   1、要处理分配ID好的任务+处理与People Counter 模块的通讯+ 处理与主芯片的通讯 +还要处理自身的数据(时钟+间隔读取
                      People Counter Module 的数据(这里的People Counter Module 才用红外编码来记数,可以记 IN 和 OUT,带记带个通道,
                      最快 的速度为12.5hz,这个数据应该可以了,应该没有那个强人从一个门口1S钟 来回12次吧 ,呵呵),然后将数据存储在存储芯片
                      中去定时开关机+发送数据到我们主机系统(232 serial)+上位机通过232来设置MAC地址.... and so on),因为需要用带2个串口
                      所以从站选用ATMEGA162 ,不过有点危险 还才1点几个KB就写瞒了,如果继续增加功能的话,需要换ATMEGA64了,这也是个比较郁闷
                      的问题 
                    
                    这里有个比较有趣的事就是定时开关机的问题: 这里存在一个 如: 开始时间 08 00 关机时间为17:00  传输格式为 08 00 11 00 
                    当然这个比较符合人的思想观念,但是 如果 为 11 00 08 00 呢 开始时间比关机时间大呢,所以这里存在一个正反向的问题
                    当然还有问题,就是开机时间+关机时间+实际时间  这三者怎么比较,刚开始认为   实际时间比开机时间大  然后关机时间小 就开机
                    结果好象没有那么顺利。折磨了差不多1个晚上终于搞定, 这是我写这个程序的一个小小乐趣,看似一个一看就明白的问题,翻译到
                    程序中去就不是那么回事了.......   朋友,如果你有兴趣的话可以写个定时开关机的小程序哦,程序不多,只是逻辑有点小复杂,当然
                    可能对你来说 这是个笑话, 个人能力有差距嘛  呵呵
                 11 忘了还有什么比较重要的地方要说了,但是基本就上面这么多了,如果想起来了 会继续发贴,对于有可以相互交流的朋友可以在此贴后
                     跟贴讨论,对于有疑问的朋友可以加我QQ(492031062(加时著名“CC1101”),thanks)到我们主机系统(232 serial),), 讨论,
                    我只能尽我的能力把这个问题说明白, 但是我不保证我的这种通讯的完美性,如果有后来者模仿,有问题者,本人不负任何法律责任。

    备注:nRF24AP2芯片:2.4GHz频段,内置无线自组网协议芯片。

  • 相关阅读:
    Java Spring MVC框架搭建(一)
    LeetCode 239. Sliding Window Maximum(Hard)
    LeetCode 238. Product of Array Except Self
    LeetCode 237 Delete Node in a Linked List
    LeetCode 236. Lowest Common Ancestor of a Binary Tree
    LeetCode 235 Lowest Common Ancestor of a Binary Search Tree
    LeetCode 234. Palindrome Linked List
    LeetCode 232. Implement Queue using Stacks
    LeetCode 231. Power of Two
    LeetCode 230. Kth Smallest Element in a BST
  • 原文地址:https://www.cnblogs.com/YH-APP/p/4754205.html
Copyright © 2011-2022 走看看