【嵌入式开发】自定义AT指令实现sniffer网络嗅探功能

基础

该功能是在NON-OS SDK下实现的。

Non-OS SDK 是不不基于操作系统的 SDK,提供 IOT_Demo 和 AT 的编译。Non-OS SDK 主要使⽤用定时器和回调函数的方式实现各个功能事件的嵌套,达到特定条件下触发特定功能函数的目的。Non-OS SDK 使用 espconn 接口实现网络操作,用户需要按照 espconn 接口的使用规则进行软件开发。

下面给出官方文档中的SDK使用流程图:

这里写图片描述

这里就不过多阐述如何编译并烧写固件的问题,稍微提两点:

其一就是如果大家要编译example里的文件
记得将对应的文件夹从example中拖到主目录下,比如我写好的固件叫作at那对应应该放的位置就应该是:
这里写图片描述

其二就是关于AT固件的烧写格式(注意文档中用到的是Mbit,32Mbit = 4 MB):
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

自定义AT指令

自定义 AT 指令命名时,使用英文字符,请勿使⽤用其他特殊字符或数字。 AT 基于 ESP8266_NONOS_SDK 编译,ESP8266_NONOS_SDK/example/at中提供了开发者自定 AT指令的示例。乐鑫原本提供的 AT 指令以库文件 libat.a 的形式提供,将包含在编译⽣生成的 AT BIN 固件中。

首先是参照样例程序注册我们的AT指令

extern void at_exeCmdCiupdate(uint8_t id);
at_funcationType at_custom_cmd[] = {
    {
  "+TEST", 5, at_testCmdTest, at_queryCmdTest, at_setupCmdTest, at_exeCmdTest},
    {
  "+MACSNIFFER", 11, at_testMacSniffer, NULL, NULL,  at_exeMacSniffer}
};

第一个参数是我们命令的名字,如上图,运行固件后发送AT+MACSNIFFER样式的命令即可执行我们的程序。
第二个参数 11 是命令字符串的长度。
而一条指令可以有4种类型,下面给出官方文档截图:
这里写图片描述

由于我们只需要测试指令和执行指令,所以只在参数3和6里填上对应的函数即可,其余填入NULL

然后需要在user_init(void)里注册我们的AT指令

//注册用户自定义的 AT 指令
at_cmd_array_regist(&at_custom_cmd[0], sizeof(at_custom_cmd)/sizeof(at_custom_cmd[0]));

接着是实现我们的函数,这里只给出执行函数的实现

void ICACHE_FLASH_ATTR
at_exeMacSniffer(uint8_t id)
{
    uint8 buffer[32] = {
  0};

    os_sprintf(buffer, "\r\n");
    at_port_print(buffer);

    at_getMac();
    //at_response_ok();
}

为什么要有 ICACHE_FLASH_ATTR, 文档如是说:
这里写图片描述

添加了ICACHE_FLASH_ATTR的代码通常比使用IRAM_ATTR标记的代码执行得慢。然而, 像大多数嵌入式平台一样,ESP8266 的 iRAM 空间有限,因此建议一般代码添加 ICACHE_FLASH_ATTR,仅对执行行效率要求高的代码添加 ICACHE_FLASH_ATTR

这里我没让我的函数立刻response ok, 因为是使用回调的机制,我不想在我没给出结果的时候就返回OK,同时我也不想在我运行我的指令的时候,还能输入别的AT指令,所以我还需要接着添加一句代码:at_enter_special_state(),这句代码保证了在我的指令运行期间,其他指令输入时,命令行返回busyat_getMac() 定义如下:

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值