简单嵌入式开发方案(嵌入式大杂烩周记)

大家好,我是ZhengN。

嵌入式大杂烩周记主要是一些实用项目学习分享,每周一篇,每篇一个主题。

内容主要来源于我们之前收集的资料:

https://gitee.com/zhengnianli/EmbedSummary

本期主角:SmartLink

项目需要用到smartconfig,之前我也没接触过,查资料了解的过程发现了一个好东西——SmartLink,分享给大家。

SmartLink是一个在Linux下实现的smartconfig。

仓库链接:

https://github.com/jolin90/smartconfig

SmartLink的介绍及使用1、相关知识补充

在介绍SmartLink的使用之前,我们先补充点相关知识。

(1)什么是smartconfig?

我们刚买回来的智能插座,第一步要做的就是给设备进行配网。

配网方式有很多,smartconfig就是其中一种:

简单嵌入式开发方案(嵌入式大杂烩周记)(1)

简单嵌入式开发方案(嵌入式大杂烩周记)(2)

图片来源:物联网电子世界

手机发送UDP广播报文,待配网设备扫描所有的可用无线信道,找到发送smartConfig的报文,并锁定在这一信道上开始接受数据。

(2)网卡工作模式
  • 广播模式:物理地址(MAC)是0Xffffff的帧为广播帧,工作在广播模式的网卡接收广播帧。
  • 多播模式:如果将网卡设置为多播模式,它可以接收所有的多播传送帧,而不论他是不是组内成员。
  • 直接模式:只接收目的地址是自己MAC地址的帧。
  • 混杂模式:工作在混杂模式下的网卡接收所有流经网卡的帧。

查看、设置、取消混杂模式命令如:

ifconfig wlan0 #查看wlan0是否为混杂模式 ifconfig wlan0 promisc #设置wlan0为混杂模式 ifconfig wlan0 -promisc #取消wlan0混杂模式

简单嵌入式开发方案(嵌入式大杂烩周记)(3)

(3)通信方式

通信方式分类:

  • 单播:单台主机与单台主机之间的通信;
  • 广播:单台主机与网络中所有主机的通信;
  • 组播:单台主机与选定的一组主机的通信;

IP 网络的组播一般通过组播 IP 地址来实现,组播 IP 地址就是 D 类 IP 地址,即 224.0.0.0 至 239.255.255.255 之间的IP地址。

2、SmartLink使用

下载得到:

简单嵌入式开发方案(嵌入式大杂烩周记)(4)

我们使用arm板子来做实验。首先,需要交叉编译,执行命令:

make CC=arm-linux-gnueabihf-gcc

把编译生成的smartlink可执行程序传到板子里。运行时需要跟上接口的名称。如:

./smartlink wlan0

然后执行如下命令重新编译:

make clean make

生成的mcast_app可执行程序在pc上运行,模拟手机APP发送。运行时需要传入WiFi名称及密码。如:

./mcast_app Tenda_552F18 0987654321

测试时需要先运行mcast_app,再运行smartlink。smartlink收到WiFi名称及密码时会打印出来。

运行结果如:

简单嵌入式开发方案(嵌入式大杂烩周记)(5)

这里,使用mcast_app来模拟手机APP。smartlink也提供了一个简易的安卓手机APP,也可以使用APP进行测试:

简单嵌入式开发方案(嵌入式大杂烩周记)(6)

4、SmartLink组播包协议分析

上面演示了SmartLink的使用,下面简单介绍一些SmartLink的组播包协议。

APP发送特定协议的组播包数据给设备,设备收到后进行解析获取路由器SSID及密码。其协议如:

每个数据包6个字节,

  • 第1~3字节:组播包地址,为固定值0x01 0x00 0x5e。
  • 第4字节:数据包序号。
  • 第5字节:指定数据。
  • 第6个字节:指定数据。

每次传输若干字节。举例说明:

SSID为"TP-LINK_hys" ,PSW为"12345678",发送组播地址如下:

0x01 0x00 0x5e 0x00 0x48 0x35 0x01 0x00 0x5e 0x01 0x68 0x2b 0x01 0x00 0x5e 0x02 0x5c 0x31 0x01 0x00 0x5e 0x03 0x0b 0x08 0x01 0x00 0x5e 0x04 'T' '1' 0x01 0x00 0x5e 0x05 'P' '2' 0x01 0x00 0x5e 0x06 '-' '3' 0x01 0x00 0x5e 0x07 'L' '4' 0x01 0x00 0x5e 0x08 'I' '5' 0x01 0x00 0x5e 0x09 'N' '6' 0x01 0x00 0x5e 0x0a 'K' '7' 0x01 0x00 0x5e 0x0b '_' '8' 0x01 0x00 0x5e 0x0c 'h' 0x00 0x01 0x00 0x5e 0x0d 'y' 0x00 0x01 0x00 0x5e 0x0e 's' 0x00 0x01 0x00 0x5e 0x40 0x1c 0x03

其中:

(1)第1~3包数据,为特征码包,后三个字节由组播IP映射为为组播MAC。取组播IP的后23位作为MAC,映射图如:

简单嵌入式开发方案(嵌入式大杂烩周记)(7)

图片来源:jasonj33的博客

组播地址相关介绍可阅读博文:

https://blog.csdn.net/wjz110201/article/details/114628203

这里,手机APP设置的组播IP固定如:

#define IPADDR_KEY0 "224.0.72.53" /*key0:01:00:5e:00:48:35 */ #define IPADDR_KEY1 "224.1.104.43" /*key1:01:00:5e:01:68:2b */ #define IPADDR_KEY2 "224.2.92.49" /*key2:01:00:5e:02:5c:31 */

组播IP映射为组播MAXC,得到:

取后23位即为0.72.53对应16进制为00:48:35 取后23位即为1.104.43对应16进制为01:68:2b 取后23位即为2.92.49对应16进制为02:5c:31

(2)第4包数据放的是SSID及PSW的长度。

(3)第5~15包数据放的则是SSID及PSW。

(4)第16包数据为校验码,采用连续异或校验的方式:

Crc=Crc^0x01^(byte)0x5e^0x40

以上就是本次的分享,文章如有错误,欢迎指出,谢谢!

咱们下期见~

猜你喜欢:

嵌入式大杂烩周记 第 4 期:cola_os

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页