W5500-EVB-Pico 和 WizFi360 Azure 物联网网关

通过 MQTT 使用 C/C++ 和 Wi-Fi 网关发送和接收消息,将 W5500-EVB-Pico 连接到 Azure IoT Hub 的过程。

 

转发: W5500-EVB-Pico and WizFi360 Azure IoT Gateway


项目介绍

W5500/W5100S-EVB-Pico 通过 MQTT 使用 C/C++ 和 Gateway 发送和接收消息的过程。

您还可以使用 W5500/W5100S 或 Ethernet HAT+WizFi360-EVB-Pico 构建以下 HW 类型。

我对 IoT 中心使用了 SAS 令牌身份验证方法。

成分

1.硬件

  • 用于以太网和 MCU 的 W5100S-EVB-Pico
  • 用于 Wi-Fi 的 WizFi360
  • 微型 5 针 USB 数据线
  • 网线

W5500 和 WizFi360 PIN 连接的详细信息

WizFi 的 TDX 和 RDX 跳线将 UART 数据发送到 UART W5500-EVB-Pico 引脚。

1. 1 WizFi360引脚图

1. 2 W5500-EVB-Pico 引脚图

W5100S-EVB-Pico | WIZnet Document System

2.软件

2.1 准备Azure资源

创建 Azure 物联网中心

创建Azure IoT Hub的方式有很多种,比如Azure portal、Azure CLI、REST API等,一开始我们主要使用通过Azure portal创建的方式。

可以在下面的链接中找到说明。

如何生成和注册证书。

请遵循本指南: Azure IoT cloud monitored and controlled Raspberry Pi Pico - Hackster.io

2.2 RP2040 C/C++开发环境

W5100S-EVB-Pico C/C++ Windows Development Environment

2.3 C/C++固件

2.3.1 建造

构建操作使用了 Raspberry Pi C/C++ 环境。

W5100S-EVB-Pico C/C++ Windows Development Environment

下载并安装集成开发环境的程序

Release v0.3.4 · ndabas/pico-setup-windows · GitHub

2.3.2 存储库克隆

Raspberry Pi Pico W5x00 Azure IoT SDK 示例

RP2040 - W5100S 或 W5500 网络示例 - Azure IoT 云功能、Azure IoT SDK、Azure IoT 设备客户端和服务器。

构建 W5100S-EVB-Pico 设备固件

设备源代码

我将RP2040(W5500/W5100和WizFi360)网关设备代码上传到下面的链接,通过WiFi物联网设备的MAC地址进行控制。

已从 RP2040-HAT-AZURE-C 添加和修改 Azure IoT 中心网关内容:original example code.

  • W5100S/W5500 Azure IoT 中心连接设置
    通过 MAC 地址修改遥测消息传输到物联网设备/从物联网设备接收

克隆包含子模块的存储库并检索子模块。

git clone https://github.com/Wiznet/RP2040-HAT-AZURE-C.git
cd RP2040-HAT-AZURE-C

git submodule update --init
  • 如何管理此网关的设备信息

该网关执行以太网线程和 Wi-Fi 服务器线程。 当客户端物理连接到 AP 时,我们称之为连接状态。 在Wi-Fi驱动中采用; 我修改了 CMSIS WiFi 驱动程序 WiFi_WizFi360.h 和 WiFi_WizFi360.c 来管理连接信息。 (对于这个项目,我更新了从这个项目管理的客户端的 MAC 地址:IoT Gateway : W5500 + Raspberry Pi Pico + WizFi360 - Hackster.io)

typedef struct {
  uint8_t conn_mac[8];
  uint8_t conn_ip[4];
} CONNECTED_MAC_IP_s;

当客户端逻辑连接到 AP 的服务器时,我们称为链路连接。 因此网关管理着两个独立的客户端的 IP 和 MAC 地址数据。 网关通过区分物联网设备的 MAC 地址在 Azure 物联网中心和物联网设备之间发送和接收每个物联网设备的数据。 我们称其为链接的 MAC 地址。

/* ------------------------------------------------------------------------
 * WizFi360 added for IoT Devices
 * Station Connection Event Declaration
  : to update/delete Mac Address for distinguishing IoT Devices
 * -----------------------------------------------------------------------*/
void update_connected_macIp(uint8_t macAddr[6], uint8_t ipAddr[4]);
void update_linked_mac(void);
int update_unliked_mac(uint8_t macAddr[6]);
CONNECTED_MAC_IP_s ConnSta[4];   // Station's mac address connected to AP
uint8_t LinkedMac[5][6] = {0, }; // Client's mac address connected to Server
  • 设置您的电路板网络信息并选择示例应用程序

在以下 RP2040-HAT-AZURE-C/examples/main.c source 文件中,找到与此类似的行并根据需要替换它: RP2040-HAT-AZURE-C/examples/main.c

(...)

// The application you wish to use should be uncommented
//
#define APP_TELEMETRY
//#define APP_C2D
//#define APP_CLI_X509
//#define APP_PROV_X509

// The application you wish to use DHCP mode should be uncommented
#define _DHCP
static wiz_NetInfo g_net_info =
    {
        .mac = {0x00, 0x08, 0xDC, 0x12, 0x34, 0x56}, // MAC address
        .ip = {192, 168, 11, 2},                     // IP address
        .sn = {255, 255, 255, 0},                    // Subnet Mask
        .gw = {192, 168, 11, 1},                     // Gateway
        .dns = {8, 8, 8, 8},                         // DNS server
#ifdef _DHCP
        .dhcp = NETINFO_DHCP // DHCP enable/disable
#else
        // this example uses static IP
        .dhcp = NETINFO_STATIC
#endif
};
  • 设置关键信息

从 Azure 门户复制并粘贴正确的连接字符串和键值到RP2040-HAT-AZURE-C/examples/sample_certs.c:

/* Paste in your IoT hub connection string  */
const char pico_az_connectionString[] = "[device connection string]";

const char pico_az_x509connectionString[] = "[device connection string]";

const char pico_az_x509certificate[] =
"-----BEGIN CERTIFICATE-----""\n"
"-----END CERTIFICATE-----";

const char pico_az_x509privatekey[] =
"-----BEGIN PRIVATE KEY-----""\n"
"-----END PRIVATE KEY-----";

const char pico_az_id_scope[] = "[ID Scope]";

const char pico_az_COMMON_NAME[] = "[custom-hsm-device]";

const char pico_az_CERTIFICATE[] =
"-----BEGIN CERTIFICATE-----""\n"
"-----END CERTIFICATE-----";

const char pico_az_PRIVATE_KEY[] =
"-----BEGIN PRIVATE KEY-----""\n"
"-----END PRIVATE KEY-----";

2.4 构建并运行

1. 构建并运行应用程序

运行 VS Code 或 VS 2019 的 Developer 命令提示符并构建应用程序。 将 main.uf2 文件复制到 Raspberry Pi Pico 板中。

2.5 固件上传

将固件上传到设备。

进入启动模式

如果在按住BOOTSEL键的同时按下RUN键,则进入开机模式,无需重新上电。

3. 设置 Azure 物联网中心

安装工具和库

有多种获取信息的方法,其中,我使用了 IoT Explorer。

在 Azure 环境中安装 PC 库。

从 IoT Explorer 获取设备信息

您需要获取连接到 Azure IoT 中心的信息并将其写入您的代码。

请参阅 Azure IoT 中心指南:使用 MQTT 协议与您的 IoT 中心通信,了解与 MQTT 通信时每个字段的要求: Azure IoT Hub Guide: Communicate with your IoT hub using the MQTT protocol 

对于示例代码,应获取以下数据。

  • 设备连接字符串
  • 设备 SAS 令牌

如果查看代码,它会解析连接字符串以获取主机名、设备 ID 和共享访问键值。

设置 IoT Explorer IoT 中心连接

首先,需要授予访问权限,以便 IoT Explorer 可以访问 IoT 中心。

在默认权限中,iothubowner 权限(包括所有权限)将授予 IoT Explorer。

单击 iothubonwer,单击主连接字符串右侧的按钮,复制值,然后将其粘贴到在 IoT Explorer 中单击添加连接并保存时出现的窗口中。

设备创建

如果一开始只设置一次此设置,则可以在该工具中执行 IoT 中心和设备的大部分任务。

创建设备后,得到如图所示的信息值。

4. 执行和监控

简单遥测测试:使用设备自己的 MAC 地址接收来自物联网设备的消息

Cloud-to-Device 消息:使用设备自己的 MAC 地址将消息发送到 IoT 设备

物联网设备的接收消息日志

Sending message 1 to IoTHub
Message:
iotSocketRecv data is 123

Sending message 7 to IoTHub
Message:
-> 08:18:48 PUBLISH | IS_DUP: false | RETAIN: 0 | QOS: DELIVER_AT_LEAST_ONCE | TOPIC_NAME: devices/wiznetGateway/messages/events/display_message=Hello_RP2040_W5100S&%24.cid=CORE_ID&%24.mid=MSG_ID&%24.ct=application%252fjson&%24.ce=utf-8 | PACKET_ID: 9 | PAYLOAD_LEN: 53

<- 08:18:50 PUBACK | PACKET_ID: 9
Confirmation callback received for message 7 with result IOTHUB_CLIENT_CONFIRMATION_OK

iotSocketRecv data is wiznet device1

<- 07:42:36 PUBLISH | IS_DUP: false | RETAIN: 0 | QOS: DELIVER_AT_LEAST_ONCE | TOPIC_NAME: devices/wiznetGateway/messages/devicebound/%24.mid=080d3e1f-e25e-437e-b15b-5525878f9439&%24.to=%2Fdevices%2FwiznetGateway%2Fmessages%2Fdevicebound&mac=48%3A60%3A5F%3A2F%3A76%3AC8 | PACKET_ID: 5 | PAYLOAD_LEN: 9
Received Binary message
Message ID: 080d3e1f-e25e-437e-b15b-5525878f9439
 Correlation ID: <unavailable>
 Data: <<<Power Off>>> & Size=9

Message Properties:
        Key: mac Value: 48:60:5F:2F:76:C8
macstr: 48:60:5F:2F:76:C85h en = 26
Received C-to-D Message: Power Off
MQTT Subsribed the msg to client: Power Off, idx = 1

Message Call Count is 4:

-> 07:42:37 PUBACK | PACKET_ID: 5
iotSocketSend data is Power Off

如何组成远程物联网设备

您可以设置它,以便 Azure IoT Hub 可以通过此网关控制 IoT 设备(客户端),请参阅下文。

TCP 客户端 LED 开/关参考和示例:

TCP Client LED ON & OFF for Raspberry Pi Pico with WizFi360

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值