Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
ESP8266
ping
ESP-01S模块(wifi模块)使用ping指令报错
发布于 2023-06-21 10:29:25 浏览:311
订阅该版
[tocm] #### 一、开发环境 开发板:野火stm32f407开发板 wifi模块:ESP-01S(核心处理器 ESP8266 ),固件版本(MQTT固件) 操作系统:rt-thread操作系统 #### 二、适配固件信息,如果不修改的话会提示不支持AT+CIPDNS_CUR?命令。 代码修改如下: ``` static void esp8266_get_netdev_info(struct rt_work *work, void *work_data) { #define AT_ADDR_LEN 32 #define AT_ERR_DNS_SERVER "255.255.255.255" #define AT_DEF_DNS_SERVER "114.114.114.114" at_response_t resp = RT_NULL; char ip[AT_ADDR_LEN] = {0}, mac[AT_ADDR_LEN] = {0}; char gateway[AT_ADDR_LEN] = {0}, netmask[AT_ADDR_LEN] = {0}; char dns_server1[AT_ADDR_LEN] = {0}, dns_server2[AT_ADDR_LEN] = {0}; const char *resp_expr = "%*[^\"]\"%[^\"]\""; const char *resp_dns = "+CIPDNS:1,%s";// ip_addr_t ip_addr; rt_uint32_t mac_addr[6] = {0}; rt_uint32_t num = 0; rt_uint32_t dhcp_stat = 0; struct at_device *device = (struct at_device *)work_data; struct netdev *netdev = device->netdev; struct at_client *client = device->client; if (work != RT_NULL) { rt_free(work); } resp = at_create_resp(512, 0, rt_tick_from_millisecond(300)); if (resp == RT_NULL) { LOG_E("no memory for resp create."); return; } /* send mac addr query commond "AT+CIFSR" and wait response */ if (at_obj_exec_cmd(client, resp, "AT+CIFSR") < 0) { goto __exit; } if (at_resp_parse_line_args_by_kw(resp, "STAMAC", resp_expr, mac) <= 0) { LOG_E("%s device parse \"AT+CIFSR\" cmd error.", device->name); goto __exit; } /* send addr info query commond "AT+CIPSTA?" and wait response */ if (at_obj_exec_cmd(client, resp, "AT+CIPSTA?") < 0) { LOG_E("%s device send \"AT+CIPSTA?\" cmd error.", device->name); goto __exit; } if (at_resp_parse_line_args_by_kw(resp, "ip", resp_expr, ip) <= 0 || at_resp_parse_line_args_by_kw(resp, "gateway", resp_expr, gateway) <= 0 || at_resp_parse_line_args_by_kw(resp, "netmask", resp_expr, netmask) <= 0) { LOG_E("%s device prase \"AT+CIPSTA?\" cmd error.", device->name); goto __exit; } /* set netdev info */ inet_aton(gateway, &ip_addr); netdev_low_level_set_gw(netdev, &ip_addr); inet_aton(netmask, &ip_addr); netdev_low_level_set_netmask(netdev, &ip_addr); inet_aton(ip, &ip_addr); netdev_low_level_set_ipaddr(netdev, &ip_addr); sscanf(mac, "%x:%x:%x:%x:%x:%x", &mac_addr[0], &mac_addr[1], &mac_addr[2], &mac_addr[3], &mac_addr[4], &mac_addr[5]); for (num = 0; num < netdev->hwaddr_len; num++) { netdev->hwaddr[num] = mac_addr[num]; } /* send dns server query commond "AT+CIPDNS?" and wait response */ if (at_obj_exec_cmd(device->client, resp, "AT+CIPDNS?") < 0) { LOG_W("please check and update %s device firmware to support the \"AT+CIPDNS?\" cmd.", device->name); goto __exit; } if (at_resp_parse_line_args(resp, 1, resp_dns, dns_server1) <= 0 && at_resp_parse_line_args(resp, 2, resp_dns, dns_server2) <= 0) { LOG_E("%d device prase \"AT+CIPDNS?\" cmd error.", device->name); goto __exit; } /* set primary DNS server address */ if (rt_strlen(dns_server1) > 0 && rt_strncmp(dns_server1, AT_ERR_DNS_SERVER, rt_strlen(AT_ERR_DNS_SERVER)) != 0) { //inet_aton(dns_server1, &ip_addr); if(inet_aton(dns_server1, &ip_addr) == 0) { sscanf(dns_server1,"\"%[^\"]\"",dns_server1); if(rt_strcmp(dns_server1,"8.8.8.8")==0) { inet_aton(dns_server1, &ip_addr); } else if(rt_strcmp(dns_server1,"\"8.8.8.8\"")==0) { inet_aton(dns_server1, &ip_addr); } } netdev_low_level_set_dns_server(netdev, 0, &ip_addr); } else { inet_aton(AT_DEF_DNS_SERVER, &ip_addr); esp8266_netdev_set_dns_server(netdev, 0, &ip_addr); } /* set secondary DNS server address */ if (rt_strlen(dns_server2) > 0 ) { inet_aton(dns_server2, &ip_addr); netdev_low_level_set_dns_server(netdev, 1, &ip_addr); } /* send DHCP query commond " AT+CWDHCP?" and wait response */ if (at_obj_exec_cmd(client, resp, "AT+CWDHCP?") < 0) { goto __exit; } /* parse response data, get the DHCP status */ if (at_resp_parse_line_args_by_kw(resp, "+CWDHCP:", "+CWDHCP:%d", &dhcp_stat) < 0) { LOG_E("%s device prase DHCP status error.", device->name); goto __exit; } /* Bit0 - SoftAP DHCP status, Bit1 - Station DHCP status */ netdev_low_level_set_dhcp_status(netdev, dhcp_stat & 0x02 ? RT_TRUE : RT_FALSE); __exit: if (resp) { at_delete_resp(resp); } } ``` #### 三、问题 电脑ping设备正常,如下: ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230621/133f8bf8e980791b64188a56f9c37ab2.png) 设备ping百度或者电脑时,有问题,如下: ping百度: ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230621/8ac9ee48a0e9d39dce5cb15bb4ed1bea.png.webp) ping电脑,程序报错: ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230621/3e0ffc42581a7ead5151308bb686387a.png.webp)
查看更多
0
个回答
默认排序
按发布时间排序
暂无答案,快来添加答案吧
撰写答案
登录
注册新账号
关注者
0
被浏览
311
关于作者
YZRD
这家伙很懒,什么也没写!
提问
15
回答
215
被采纳
19
关注TA
发私信
相关问题
1
关于ESP8266的配网
2
at device跑esp8266, 总是提示缓冲区不够,应该怎么解决?
3
at device跑esp8266提示连接超时
4
ESP8266 连接问题
5
AT组件配网问题 ESP8266微信配网
6
请问一下esp8266能在at指令组件下支持ap模式吗
7
esp8266用paho-mqtt出现溢出
8
ONENET+esp8266连接报错
9
ESP8266通过smartconfig配网?
10
esp8266 WiFi名设成中文后 打不开RT_Thread Settings
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
2
RT-Thread 发布 EtherKit开源以太网硬件!
3
rt-thread使用cherryusb实现虚拟串口
4
《C++20 图形界面程序:速度与渲染效率的双重优化秘籍》
5
《原子操作:程序世界里的“最小魔法单位”解析》
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
ota在线升级
UART
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
at_device
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
张世争
8
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
KunYi
6
个答案
1
次被采纳
本月文章贡献
程序员阿伟
5
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
2
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部