STM32外设驱动 - Network驱动(WIFI/4G)

一、ESP12S(WIFI)

ESP12S是一款由Espressif Systems生产的Wi-Fi模块,可将其集成到物联网设备中,以实现无线通信和控制,它是ESP8266模块的升级版(基于 ESP8266 芯片),加入了更多的硬件资源和接口,适用于广泛的物联网应用;

以下是ESP12S的主要特点和功能:

  1. 支持IEEE 802.11 b/g/n Wi-Fi标准,可与任何Wi-Fi网络兼容;
  2. 集成多种接口:ESP12S支持UART、SPI、I²C和GPIO等多种接口,可以轻松与其他设备进行连接,例如传感器、执行器等;
  3. 低功耗和省电设计:ESP12S具有可定制的低功耗模式,可以延长电池寿命和操作时间;
  4. 提供安全加密功能:ESP12S支持多种安全加密协议,如WEP、WPA和WPA2,以保护无线通信安全;
  5. 小型封装和易于集成:ESP12S采用小型封装形式,可以轻松集成到各种物联网设备中;

除了以上特性,ESP12S还具有可编程固件和软件支持,易于定制和调试,以满足各种物联网应用的需求。它可应用于各种物联网应用,包括智能家居、安防、汽车和医疗设备等领域。

https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/application-note/components/at/an0014-at-client

1、AT客户端流程

初始化与检查

AT: 测试模块是否正常工作

ATE0: 关闭命令回显

Wi-Fi 配置与连接

AT+CWRECONNCFG=1,100:设置WIFI重连(连接间隔/次数)

AT+CWAUTOCONN=1: 启用Wi-Fi自动连接功能

AT+CWMODE=3: 设置Wi-Fi模式为站点模式

AT+CWJAP="SSID","PASSWORD": 连接到指定Wi-Fi网络

AT+CWJAP?: 查询当前Wi-Fi连接信息

TCP客户端操作

AT+CIPMUX=1: 启用多连接模式

AT+CIPSTART=<id>,"TCP","<url>",<port>: 建立TCP连接

AT+CIPCLOSE=<id>: 关闭TCP连接

AT+CIPSEND=<id>,<length>: 发送数据前的准备指令,之后会回复“>”

发送数据: 实际要发送的数据内容

状态和错误检查

"OK": 命令成功

"WIFI CONNECTED": Wi-Fi连接成功

"WIFI GOT IP": 获取IP地址成功

2、使能AT命令/软件包

使能AT组件:

在开发、调试、故障排查、故障复现时开启【使能打印通信数据的RAW格式】,正式发布版本关闭。

使用UART设备驱动程序:

参考STM32片上驱动 - USART驱动

注意:串口内存必须分配大于等于256,否则会出现分配内存失败,网口初始化就会失败(测试512)。

AT软件包:

默认会将套接字抽象层和网络接口设备使能:

【使能在线程中初始化】:

关闭:AT初始化将在RT-Thread的main函数前,系统初始化中进行,这种情况下AT初始化将非常耗时(初始化失败还会重试5次),从设备上电到程序正常运行约需要2分钟;

开启:AT初始化需要自己创建线程进行,从设备上电到程序正常运行耗时短,但是这样会与应用程序中判断离线的逻辑存在一定的冲突。

3、示例代码

修改wifi信息(socket参阅STM32片上驱动 - ETH驱动):

#include <rtthread.h>

#include <rtdevice.h>

#include <drv_common.h>

#include <arpa/inet.h>

#include <netdev.h>

#include <at.h>

#include <at_device_esp8266.h>

#define DBG_TAG "main"

#define DBG_LVL DBG_LOG

#include <rtdbg.h>

#define ESP8266_DEVICE_NAME "esp0"

int esp8266_info_set()

{

    // 设置WIFI为默认网卡

    struct netdev *netdev;

    netdev = netdev_get_by_name(ESP8266_DEVICE_NAME);

    if (netdev == RT_NULL) {

        rt_kprintf("network interface device %s not found!\n", ESP8266_DEVICE_NAME);

        return -1;

    }

    netdev_set_default(netdev);

    // 设置WIFI信息并连接

    netdev_set_down(netdev);

    struct at_device *device;

    device = at_device_get_by_name(AT_DEVICE_NAMETYPE_DEVICE, ESP8266_DEVICE_NAME);

    if (device == RT_NULL) {

        rt_kprintf("get at_device faild!\n");

        return -RT_ERROR;

    }

    struct at_device_ssid_pwd wifi_info;

    wifi_info.ssid = "FM_DXF";

    wifi_info.password = "dxf124213";

    if (at_device_control(device, AT_DEVICE_CTRL_SET_WIFI_INFO, &wifi_info) != RT_EOK) {

        rt_kprintf("set wifi info faild!\n");

        return -RT_ERROR;

    }

    netdev_set_up(netdev);

    return 0;

}

MSH_CMD_EXPORT(esp8266_info_set, esp8266_info_set);

#define ESP_RESET_IO GET_PIN(C, 0)

int main(void)

{

    // 使能WIFI网卡

    rt_pin_mode(ESP_RESET_IO, PIN_MODE_OUTPUT);

    rt_pin_write(ESP_RESET_IO, PIN_LOW);

    rt_thread_mdelay(200);

    rt_pin_write(ESP_RESET_IO, PIN_HIGH);

    rt_thread_mdelay(2000);

    while (1) {

        //LOG_D("Hello RT-Thread!");

        rt_thread_mdelay(1000);

    }

    return RT_EOK;

}

二、EC20(4G)

EC20是一款由Quectel(奇智尔)生产的多模LTE模块。它支持4G LTE网络,适用于广泛的物联网(IoT)应用,提供高速数据传输和可靠的通信能力;

以下是EC20的主要特点和功能:

  1. 多模多频段支持:EC20可以在全球范围内使用,支持多种LTE频段,并兼容2G和3G网络,以实现全面的网络覆盖;
  2. 高速数据传输:EC20支持LTE Cat 4技术,可提供下行速度高达150 Mbps,上行速度高达50 Mbps的数据传输速度;
  3. GNSS定位功能:EC20具备全球卫星导航系统(GNSS)功能,例如全球定位系统(GPS),俄罗斯的格洛纳斯系统和中国的北斗导航系统,可以提供精确的位置定位;
  4. 低功耗和省电设计:EC20采用低功耗设计,以便在需要长时间运行的物联网设备中延长电池寿命。
  5. 外部接口和封装:EC20提供多种接口,例如UART、USB和GPIO,以便于与其他设备进行连接。它通常以小型封装形式提供,方便集成到各种物联网设备中;
  6. EC20是一种强大和可靠的LTE模块,适用于各种物联网应用,如智能城市、车联网、智能家居和工业自动化等领域。
1、AT客户端流程

设备检查与基础功能

AT: 检查设备是否响应

ATE0: 关闭命令回显

SIM卡相关

AT+CPIN?: 检查SIM卡插入状态,回复READY为已插入

AT+QCCID: 获取SIM卡ICCID

配置与设置

AT+CTZU=3: 启用自动时区更新

信号与网络状态

AT+CSQ: 获取信号强度

AT+CREG?: 获取CS域是否注册(语音业务)

AT+CGREG?: 获取PS域是否注册(上网业务)

AT+QCFG=\"NWSCANMODE\"":查询驻网模式(切换到2G AT+QCFG="NWSCANMODE",1 切换到3G AT+QCFG="NWSCANMODE",4 切换到4G AT+QCFG="NWSCANMODE",3 切换到全网 AT+QCFG="NWSCANMODE",0)

AT+COPS?:查询运营商信息

PDP上下文

AT+QIACT=1: 激活PDP上下文服务

AT+QIACT?: 获取PDP是否注册(IP地址)

TCP连接

AT+QICFG="qisend/timeout",1000: 设置TCP数据发送超时时间

AT+QIOPEN=1,%d,"TCP","%s",%d,0,1: 建立TCP链接

AT+QICLOSE=%d: 断开TCP链接

AT+QISEND=%d,%d: TCP客户端数据发送,回复“>”后发送数据,发送状态SEND OK为发送成功

查询时间

AT+QGDCNT?: 查询流量统计

AT+CCLK?: 查询时间

发送短信/拨打电话:

AT+CMGF=1:设置短信为文本模式

AT+CMGS="+8613712345678":设置接收电话号码,输入短信内容后0x1A发送

AT^DSCI=1:启用打电话发短信返回值,2 拨号中 7 振铃中 3 接通 6 挂断 4 电话接入

ATD电话号码:拨打电话

2、使能AT命令/软件包

使能AT组件:

【使能打印通信数据的RAW格式】:在开发、调试、故障排查、故障复现时开启,正式发布版本关闭。

使用UART设备驱动程序:

参考STM32片上驱动 - USART驱动

注意:串口内存必须分配大于等于256,否则会出现分配内存失败,网口初始化就会失败(测试512)。

AT软件包:

【使能在线程中初始化】:

关闭:AT初始化将在RT-Thread的main函数前,系统初始化中进行,这种情况下AT初始化将非常耗时(初始化失败还会重试5次),从设备上电到程序正常运行约需要2分钟;

开启:AT初始化需要自己创建线程进行,从设备上电到程序正常运行耗时短,但是这样会与应用程序中判断离线的逻辑存在一定的冲突。

【电源引脚、电源状态引脚】:-1表示不配置,建议不使用软件包控制引脚,最好是在在应用程序中配合应用层联网逻辑控制4G模组得电断电。

修改设备名称:

packages/at_device-latest/samples/at_sample_ec20.c

#define NETDEV_NAME "ec20"

3、示例代码

#include <rtthread.h>

#include <rtdevice.h>

#include <drv_common.h>

#include <arpa/inet.h>

#include <netdev.h>

#define DBG_TAG "main"

#define DBG_LVL DBG_LOG

#include <rtdbg.h>

#define NETDEV_NAME "ec20"

#define EC20_ENABLE_IO GET_PIN(F, 6)

#define EC20_PWR_IO GET_PIN(F, 7)

#define EC20_RST_IO GET_PIN(F, 8)

int main(void)

{

    // 使能EC20网卡

    rt_pin_mode(EC20_ENABLE_IO, PIN_MODE_OUTPUT);

    rt_pin_mode(EC20_PWR_IO, PIN_MODE_OUTPUT);

    rt_pin_mode(EC20_RST_IO, PIN_MODE_OUTPUT);

    rt_pin_write(EC20_ENABLE_IO, PIN_LOW);

    rt_pin_write(EC20_PWR_IO, PIN_LOW);

    rt_pin_write(EC20_RST_IO, PIN_LOW);

    rt_thread_mdelay(1500);

    rt_pin_write(EC20_ENABLE_IO, PIN_HIGH);

    rt_thread_mdelay(1000);

    rt_pin_write(EC20_PWR_IO, PIN_HIGH);

    rt_thread_mdelay(1000);

    rt_pin_write(EC20_PWR_IO, PIN_LOW);

    struct netdev *netdev;

    netdev = netdev_get_by_name(NETDEV_NAME);

    if (netdev == RT_NULL) {

        rt_kprintf("network interface device %s not found!\n", NETDEV_NAME);

        return -1;

    }

    while(1) {

        rt_thread_delay(1000);

    }

    return RT_EOK;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值