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

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

 

W5500-EVB-Pico 和 WizFi360 Azure 物联网网关_第1张图片

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


项目介绍

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

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

W5500-EVB-Pico 和 WizFi360 Azure 物联网网关_第2张图片

我对 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引脚图

W5500-EVB-Pico 和 WizFi360 Azure 物联网网关_第3张图片

1. 2 W5500-EVB-Pico 引脚图

W5100S-EVB-Pico | WIZnet Document System

W5500-EVB-Pico 和 WizFi360 Azure 物联网网关_第4张图片

2.软件

2.1 准备Azure资源

创建 Azure 物联网中心

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

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

  • Create an IoT hub using the Azure portal
  • Azure IoT Explorer

如何生成和注册证书。

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

2.2 RP2040 C/C++开发环境

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

W5500-EVB-Pico 和 WizFi360 Azure 物联网网关_第5张图片

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

W5500-EVB-Pico 和 WizFi360 Azure 物联网网关_第6张图片

2.3.2 存储库克隆

Raspberry Pi Pico W5x00 Azure IoT SDK 示例

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

  • 'iothub_ll_telemetry_sample' application result
  • iothub_ll_c2d_sample' application result
  • iothub_ll_client_x509_sample' application result
  • prov_dev_client_ll_sample' application result

构建 W5100S-EVB-Pico 设备固件

设备源代码

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

  • GitHub - Wiznet/RP2040-WizFi360-Gateway-C

已从 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-----";

W5500-EVB-Pico 和 WizFi360 Azure 物联网网关_第7张图片

2.4 构建并运行

1. 构建并运行应用程序

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

W5500-EVB-Pico 和 WizFi360 Azure 物联网网关_第8张图片

2.5 固件上传

将固件上传到设备。

进入启动模式

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

3. 设置 Azure 物联网中心

安装工具和库

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

  • Azure IoT Hub Release
  • Releases · Azure/azure-IoT-explorer (github.com)

在 Azure 环境中安装 PC 库。

W5500-EVB-Pico 和 WizFi360 Azure 物联网网关_第9张图片

从 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 中心连接

  • 参考: Install and use Azure IoT explorer - Azure IoT | Microsoft Learn

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

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

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

设备创建

W5500-EVB-Pico 和 WizFi360 Azure 物联网网关_第10张图片

W5500-EVB-Pico 和 WizFi360 Azure 物联网网关_第11张图片

W5500-EVB-Pico 和 WizFi360 Azure 物联网网关_第12张图片

W5500-EVB-Pico 和 WizFi360 Azure 物联网网关_第13张图片

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

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

4. 执行和监控

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

W5500-EVB-Pico 和 WizFi360 Azure 物联网网关_第14张图片

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

W5500-EVB-Pico 和 WizFi360 Azure 物联网网关_第15张图片

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

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: 
 Data: <<>> & 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

W5500-EVB-Pico 和 WizFi360 Azure 物联网网关_第16张图片

W5500-EVB-Pico 和 WizFi360 Azure 物联网网关_第17张图片

如何组成远程物联网设备

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

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

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

W5500-EVB-Pico 和 WizFi360 Azure 物联网网关_第18张图片

你可能感兴趣的:(azure,物联网,gateway)