久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1103|回復: 0
打印 上一主題 下一主題
收起左側

STM32單片機+ESP8266+ONENET

[復制鏈接]
跳轉到指定樓層
樓主
ID:903925 發表于 2023-3-7 09:38 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
以下述代碼中,我們首先定義了mqtt_buf、mqtt_topic和mqtt_payload三個變量,分別用于存儲MQTT客戶端的緩存、MQTT主題和MQTT消息負載。然后,在ESP8266_SendString函數中,我們通過USART1向ESP8266模塊發送AT指令,以連接到WiFi網絡。接著,在MQTT_Client_Init函數中,我們使用MQTTClientInit函數初始化MQTT客戶端,使用MQTTClientConnectOptions結構體設置MQTT連接選項,然后使用MQTTClientConnect函數連接到ONENET云平臺。在MQTT_Publish函數中,我們使用MQTTClient_publish函數向ONENET云平臺發布MQTT消息。最后,在main函數中,我們獲取傳感器數據并構造JSON數據,然后通過MQTT_Publish函數發布數據到ONENET云平臺。需要注意的是,獲取傳感器數據和構造JSON數據的代碼需要根據具體的傳感器類型和數據格式進行修改。

#include "stm32f10x.h"
#include "stdio.h"
#include "string.h"
#include "MQTTClient.h"
#define ESP8266_USART USART1
#define MQTT_BUF_SIZE 1024
#define MQTT_TOPIC_LEN 128
#define MQTT_PAYLOAD_LEN 512
char mqtt_buf[MQTT_BUF_SIZE];
char mqtt_topic[MQTT_TOPIC_LEN];
char mqtt_payload[MQTT_PAYLOAD_LEN];
void ESP8266_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStruct;
    USART_InitTypeDef USART_InitStruct;

    // 使能GPIOA和USART1的時鐘
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1, ENABLE);

    // 配置PA9為USART1的TX引腳,PA10為USART1的RX引腳
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStruct);

    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStruct);

    // 配置USART1
    USART_InitStruct.USART_BaudRate = 115200;
    USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
    USART_InitStruct.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
    USART_InitStruct.USART_Parity = USART_Parity_No;
    USART_InitStruct.USART_StopBits = USART_StopBits_1;
    USART_InitStruct.USART_WordLength = USART_WordLength_8b;
    USART_Init(ESP8266_USART, &USART_InitStruct);

    // 使能USART1
    USART_Cmd(ESP8266_USART, ENABLE);
}
void ESP8266_SendString(char *str)
{
    while (*str)
    {
        USART_SendData(ESP8266_USART, (uint16_t) *str++);
        while (USART_GetFlagStatus(ESP8266_USART, USART_FLAG_TXE) == RESET);
    }
}
void MQTT_Client_Init(Network *net, MQTTClient *client)
{
    MQTTClientInit(client, net, 1000, mqtt_buf, MQTT_BUF_SIZE, mqtt_payload, MQTT_PAYLOAD_LEN);
    MQTTClientConnectOptions conn_opts = MQTTClientConnectOptions_initializer;
    conn_opts.keepAliveInterval = 60;
    conn_opts.cleansession = 1;
    int rc = MQTTClientConnect(*client, &conn_opts);
    if (rc != 0) {
        printf("MQTT client connect failed\n");
    }
}
void MQTT_Publish(MQTTClient client, char *payload)
{
    MQTTMessage msg = MQTTMessage_initializer;
    msg.qos = QOS0;
    msg.retained = 0;
    msg.payload = payload;
    msg.payloadlen = strlen(payload);
    MQTTClient_publish(client, mqtt_topic, &msg);
}
int main(void)
{
    ESP8266_Init();

    // 連接到WiFi網絡
    ESP8266_SendString("AT+CWJAP=\"SSID\",\"password\"\r\n");
    // 等待連接結果

    Network network;
    MQTTClient client;
    MQTTString topicString = MQTTString_initializer;
    topicString.cstring = mqtt_topic;
    int rc = 0;

    // 連接到ONENET云平臺
    NetworkInit(&network);
    NetworkConnect(&network, "ip", 1883);
    MQTTPacket_connectData connectData = MQTTPacket_connectData_initializer;
    connectData.clientID.cstring = "L7VkaI9WWX";
    connectData.username.cstring = "L7VkaI9WWX";
    connectData.password.cstring = "n3NMsxxWahB3xHI3uGm31UYWnEtOA0I7Rs9JXSxxTS0=";
    connectData.keepAliveInterval = 60;
    MQTT_Client_Init(&network, &client);
    sprintf(mqtt_topic, "/topic/L7VkaI9WWX/data");

    while (1)
    {
        // 獲取傳感器數據
        float temperature = read_temperature();
        float humidity = read_humidity();

        // 構造JSON數據
        sprintf(mqtt_payload, "{\"temperature\":%!f(MISSING),\"humidity\":%!f(MISSING)}", temperature, humidity);

        // 發布數據到ONENET云平臺
        MQTT_Publish(client, mqtt_payload);

        // 延時1s
        delay_ms(1000);
    }
}

請各位指正點評。

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲狠狠丁香婷婷综合久久久 | 99久久99| 亚洲精品一区中文字幕乱码 | 亚洲精品www久久久久久广东 | 久久亚洲一区 | 男人天堂网址 | 日韩电影一区二区三区 | 亚洲欧美一区在线 | 国产精品一区二区视频 | 日本精品久久久一区二区三区 | 日日干日日操 | 亚洲日本免费 | 欧美精品一区二区三区蜜桃视频 | 国产精品爱久久久久久久 | av网站免费观看 | 久久99精品久久久久久秒播九色 | 三级视频久久 | 午夜视频在线免费观看 | 日韩午夜精品 | 久久99精品久久久久久噜噜 | 秋霞在线一区二区 | 日日摸日日碰夜夜爽亚洲精品蜜乳 | 一区二区国产精品 | 免费毛片网站 | 免费日韩av网站 | 亚洲一区中文字幕在线观看 | 超碰天天 | 国产精品区二区三区日本 | 国产精品片aa在线观看 | 日本午夜视频 | 亚洲狠狠爱 | 日韩精品视频在线观看一区二区三区 | 在线看亚洲 | 一区二区在线免费播放 | 涩涩视频在线观看免费 | 国产精品v | 91私密视频 | 久久综合伊人 | 日本特黄a级高清免费大片 特黄色一级毛片 | 91欧美激情一区二区三区成人 | 国产美女在线观看 |