Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
paho-mqtt
WIZnet_W5500
使用RyanW5500连接MQTT时,提示E/mqtt: MQTTConnect wait resp fail, res:-1 errno:0
发布于 2023-06-26 10:10:29 浏览:1053
订阅该版
使用RyanW5500连接PahoMQTT,控制台提示如下错误(使用WIZnet软件包初始化可以正常连接MQ,但是上电需要等20秒,提示Socket未关闭,所以才想用RyanW5500) ``` msh [34506] E/mqtt: MQTTConnect wait resp fail, res:-1 errno:0 [34514] E/mqtt: MQTT connect error(-1): UNKNOWN_ERROR. ``` 下面是控制台显示完整内容: ``` \ | / - RT - Thread Operating System / | \ 4.1.1 build Jun 26 2023 09:38:44 2006 - 2022 Copyright by RT-Thread team [2] I/sal.skt: Socket Abstraction Layer initialize success. msh />[1013] E/netdev: netdev name[RyanW5500] length is so long that have been cut into [RyanW550]. [1024] I/RyanW5500: w5500 启动成功 [1049] W/RyanW5500: w5500Static [3026] I/RyanW5500: w5500 nedev state: 6 [4026] W/TAG: ../packages/RyanW5500-latest/W5500Client/RyanW5500Socket.c:1187 开始获取dns ifconfig network interface device: RyanW550 (Default) MTU: 1460 MAC: 00 08 dc 2f 0c 37 FLAGS: UP LINK_UP INTERNET_DOWN DHCP_DISABLE ip address: 192.168.1.10 gw address: 192.168.1.1 net mask : 255.255.255.0 dns server #0: 0.0.0.0 dns server #1: 0.0.0.0 msh />ping 192.168.1.80 32 bytes from 192.168.1.80 icmp_seq=0 time=3 ms 32 bytes from 192.168.1.80 icmp_seq=1 time=3 ms 32 bytes from 192.168.1.80 icmp_seq=2 time=3 ms 32 bytes from 192.168.1.80 icmp_seq=3 time=3 ms msh />mqtt_emqx [34492] D/mqtt: ipv4 address port: 1883 [34496] D/mqtt: HOST = '192.168.1.80' msh [34506] E/mqtt: MQTTConnect wait resp fail, res:-1 errno:0 [34514] E/mqtt: MQTT connect error(-1): UNKNOWN_ERROR. />[39523] D/mqtt: restart! [39525] D/mqtt: ipv4 address port: 1883 [39529] D/mqtt: HOST = '192.168.1.80' [39540] E/mqtt: MQTTConnect wait resp fail, res:-1 errno:0 [39548] E/mqtt: MQTT connect error(-1): UNKNOWN_ERROR. [44557] D/mqtt: restart! [44559] D/mqtt: ipv4 address port: 1883 [44563] D/mqtt: HOST = '192.168.1.80' [44574] E/mqtt: MQTTConnect wait resp fail, res:-1 errno:0 [44582] E/mqtt: MQTT connect error(-1): UNKNOWN_ERROR. [49591] D/mqtt: restart! [49593] D/mqtt: ipv4 address port: 1883 [49597] D/mqtt: HOST = '192.168.1.80' [49608] E/mqtt: MQTTConnect wait resp fail, res:-1 errno:0 [49616] E/mqtt: MQTT connect error(-1): UNKNOWN_ERROR. [54625] D/mqtt: restart! [54627] D/mqtt: ipv4 address port: 1883 [54631] D/mqtt: HOST = '192.168.1.80' [54642] E/mqtt: MQTTConnect wait resp fail, res:-1 errno:0 [54650] E/mqtt: MQTT connect error(-1): UNKNOWN_ERROR. [59659] D/mqtt: restart! [59661] D/mqtt: ipv4 address port: 1883 [59665] D/mqtt: HOST = '192.168.1.80' [59676] E/mqtt: MQTTConnect wait resp fail, res:-1 errno:0 [59684] E/mqtt: MQTT connect error(-1): UNKNOWN_ERROR. ``` 下面是完整实现步骤: 1、board.h打开 `#define BSP_USING_SPI2` 2、stm32f1xx_hal_conf.h打开 `#define HAL_SPI_MODULE_ENABLED`   3、board.c文件末尾添加初始化spi2代码并自动挂载: ```c void HAL_SPI_MspInit(SPI_HandleTypeDef *spiHandle) { GPIO_InitTypeDef GPIO_InitStruct; RT_ASSERT(spiHandle != RT_NULL); #ifdef BSP_USING_SPI1 if (spiHandle->Instance == SPI1) { /* SPI1 clock enable */ __HAL_RCC_SPI1_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); /**SPI1 GPIO Configuration PA5 ------> SPI1_SCK PA6 ------> SPI1_MISO PA7 ------> SPI1_MOSI */ GPIO_InitStruct.Pin = GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF5_SPI1; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); } else #endif #ifdef BSP_USING_SPI2 if (spiHandle->Instance == SPI2) { /* SPI2 clock enable */ __HAL_RCC_SPI2_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); /**SPI2 GPIO Configuration PB13 ------> SPI2_SCK PB14 ------> SPI2_MISO PB15 ------> SPI2_MOSI */ GPIO_InitStruct.Pin = GPIO_PIN_13|GPIO_PIN_15; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); GPIO_InitStruct.Pin = GPIO_PIN_14; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); } else #endif #ifdef BSP_USING_SPI3 if (spiHandle->Instance == SPI3) { /* SPI3 clock enable */ __HAL_RCC_SPI3_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); /**SPI3 GPIO Configuration PB3 (JTDO-TRACESWO) ------> SPI3_SCK PB4 (NJTRST) ------> SPI3_MISO PB5 ------> SPI3_MOSI */ GPIO_InitStruct.Pin = GPIO_PIN_3 /* | GPIO_PIN_4 */ | GPIO_PIN_5; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF6_SPI3; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); } else #endif { RT_ASSERT(0); } } //自动初始化 rt_hw_spi_flash_init 函数,将spi20 挂载到spi2总线上 static int rt_hw_spi_flash_init(void) { __HAL_RCC_GPIOB_CLK_ENABLE(); rt_hw_spi_device_attach("spi2", "spi20", GPIOB, GPIO_PIN_12); return RT_EOK; } /* 导 出 到 自 动 初 始 化 */ INIT_COMPONENT_EXPORT(rt_hw_spi_flash_init); ``` 4、下载RyanW5500软件包,并修改IP为192.168.1.10,不启用DHCP,使用静态IP,如下:   启动代码: ```c int w5500Start() { if (NULL != RyanNetdev) { ulog_w(TAG, "w5500已经启动,不要重复选择"); return -1; } wiz_NetInfo netInfo = {0}; // mac地址有48bit // mac地址高24bit表示网卡制造商,由IEEE分配,称为OUI(组织唯一标识符), 低24bit为网卡制造商分配的唯一编号 // mac地址首位偶数单播,首位奇数为多播地址,多播作为设备地址是无效(第48bit 0 单播, 1 多播) // 广播mac地址:FF-FF-FF-FF-FF-FF // 第一个字节一般为00 uint8_t myMac[6] = {0x00, 0x08, 0xdc, 0x2f, 0x0c, 0x37}; // stm32可以使用唯一96Bit芯片序列号 // myMac[3] = *(uint8_t *)(UID_BASE + 0); // myMac[4] = *(uint8_t *)(UID_BASE + 4); // myMac[5] = *(uint8_t *)(UID_BASE + 8); memcpy(netInfo.mac, myMac, sizeof(netInfo.mac)); // 用户也使用随机数来,需要支持rand函数才行 // ?但操作系统启动时间几乎时恒定的,ms时钟,可能造成随机数种子相同,随机数也一样的可能性 // srand(rt_tick_get()); // 设立随机数种子 // myMac[3] = rand() % 254 + 0;// 生成0~254的随机数 // srand(rt_tick_get()); // 设立随机数种子 // myMac[4] = rand() % 254 + 0;// 生成0~254的随机数 // srand(rt_tick_get()); // 设立随机数种子 // myMac[5] = rand() % 254 + 0;// 生成0~254的随机数 uint8_t ipStrArr[4] = {0}; inet_pton(AF_INET, "192.168.1.10", &ipStrArr); memcpy(netInfo.ip, ipStrArr, 4); inet_pton(AF_INET, "255.255.255.0", &ipStrArr); memcpy(netInfo.sn, ipStrArr, 4); inet_pton(AF_INET, "192.168.1.1", &ipStrArr); memcpy(netInfo.gw, ipStrArr, 4); inet_pton(AF_INET, "0.0.0.0", &ipStrArr); memcpy(netInfo.dns, ipStrArr, 4); netInfo.dhcp = NETINFO_STATIC; // 使能dhcp if (0 != RyanW5500Init(&netInfo)) // 初始化w5500并启动 { ulog_e(TAG, "初始化w5500错误"); return -1; } RyanNetdev = netdev_get_by_name("RyanW5500"); // netdev if (NULL == RyanNetdev) { ulog_e(TAG, "No device found"); return -1; } netdev_set_default(RyanNetdev); netdev_set_status_callback(RyanNetdev, neDevStatusChangeCallback); ulog_i(TAG, "w5500 启动成功"); // while (!netdev_is_link_up(RyanNetdev)) // { // delay(200); // } return 0; } ``` staric代码: ```c int w5500Static() { // 测试netDev netdev_dhcp_enabled(RyanNetdev, RT_FALSE); // 设置网卡 IP 地址 uint32_t addr = inet_addr("192.168.1.10"); netdev_set_ipaddr(RyanNetdev, (const ip_addr_t *)&addr); addr = inet_addr("192.168.1.1"); // 设置网卡网关地址 netdev_set_gw(RyanNetdev, (const ip_addr_t *)&addr); addr = inet_addr("255.255.255.0"); // 设置网卡子网掩码地址 netdev_set_netmask(RyanNetdev, (const ip_addr_t *)&addr); addr = inet_addr("0.0.0.0"); // 设置网卡子网掩码地址 netdev_set_dns_server(RyanNetdev, 0, (const ip_addr_t *)&addr); ulog_w(TAG, "w5500Static"); return 0; } ``` 然后在RyanW5500Store.h头文件内声明 int w5500Start(); int w5500Static();  然后主函数内添加头文件,并调用启动W5500函数和static函数  启动后连接MQ使用MSH控制台调用mqtt_emqx示例提示: ``` msh />mqtt_emqx [34492] D/mqtt: ipv4 address port: 1883 [34496] D/mqtt: HOST = '192.168.1.80' msh [34506] E/mqtt: MQTTConnect wait resp fail, res:-1 errno:0 [34514] E/mqtt: MQTT connect error(-1): UNKNOWN_ERROR. />[39523] D/mqtt: restart! ```
查看更多
1
个回答
默认排序
按发布时间排序
Ryan_CW
认证专家
2023-06-26
这家伙很懒,什么也没写!
pahoMqtt内部的一些特性RyanW5500并不支持,比如select、MSG_DONTWAIT 可以参考RyanMqtt的网络接口,修改下pahoMqtt的net_read函数
撰写答案
登录
注册新账号
关注者
0
被浏览
1.1k
关于作者
Lrain
这家伙很懒,什么也没写!
提问
13
回答
22
被采纳
0
关注TA
发私信
相关问题
1
W5500软件包开机无法解析link.rt-thread.org
2
W5500 如何实现断开重连?
3
W5500初始化全部都OK,电脑能ping板子,板子ping不通电脑
4
w5500 编译错误
5
求个SPI上挂W5500、Max6675两个设备的驱动例子
6
TFTP与W5500配合能传文件但无内容
7
wiznet(W5500) 设置MAC
8
SPI总线挂接2个W5500以太网芯片
9
多网卡建立链路问题,求官方解答
10
为什么W5500一直显示无法挂载
推荐文章
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
【FRDM-MCXA156测评】- CherryUSB与hid鼠标设备模仿
2
【FRDM-MCXA156测评】- 硬件SPI模块
3
【NXP-MCXA156】恩智浦A156上的 IIC(硬件) 实践
4
【FRA156测评DM-MCX】- PWM模块
5
【FRDM-MCXA156 评测】CAN通讯
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
rt-smart
FAL
I2C_IIC
UART
ESP8266
cubemx
WIZnet_W5500
ota在线升级
PWM
BSP
flash
freemodbus
packages_软件包
潘多拉开发板_Pandora
定时器
GD32
ADC
flashDB
编译报错
socket
中断
Debug
rt_mq_消息队列_msg_queue
keil_MDK
ulog
SFUD
msh
C++_cpp
MicroPython
本月问答贡献
出出啊
1520
个答案
343
次被采纳
小小李sunny
1444
个答案
290
次被采纳
张世争
813
个答案
177
次被采纳
crystal266
550
个答案
161
次被采纳
whj467467222
1222
个答案
149
次被采纳
本月文章贡献
出出啊
1
篇文章
5
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
3
次点赞
crystal266
2
篇文章
1
次点赞
whj467467222
2
篇文章
2
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部