chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

智慧農(nóng)業(yè):STM32+ESP8266+騰訊物聯(lián)網(wǎng)+小程序

DS小龍哥-嵌入式技術(shù) ? 來源:DS小龍哥-嵌入式技術(shù) ? 作者:DS小龍哥-嵌入式技 ? 2022-02-28 13:56 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

?

一、環(huán)境介紹

單片機采用:STM32F103ZET6

上網(wǎng)方式:采用ESP8266,也可以使用其他設(shè)備代替,只要支持TCP協(xié)議即可。比如:GSM模塊、有線網(wǎng)卡等。

物聯(lián)網(wǎng)云平臺的通信協(xié)議:標(biāo)準(zhǔn)MQTT協(xié)議3.1.1(TCP)

開發(fā)軟件:keil5

物聯(lián)網(wǎng)平臺: 騰訊IOT物聯(lián)網(wǎng)物聯(lián)網(wǎng)平臺。騰訊的物聯(lián)網(wǎng)平臺比起其他廠家的物聯(lián)網(wǎng)平臺更加有優(yōu)勢,騰訊物聯(lián)網(wǎng)平臺可以將數(shù)據(jù)推到微信小程序上,用戶可以直接使用小程序綁定設(shè)備,完成與設(shè)備之間交互,現(xiàn)在用戶基本都會使用微信,所以使用起來非常方便。

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

二、智慧農(nóng)業(yè)介紹

智慧農(nóng)業(yè)就是將物聯(lián)網(wǎng)技術(shù)運用到傳統(tǒng)農(nóng)業(yè)中去,運用傳感器和軟件通過移動平臺或者電腦平臺對農(nóng)業(yè)生產(chǎn)進行控制,使傳統(tǒng)農(nóng)業(yè)更具有“智慧”。除 了精準(zhǔn)感知、控制與決策管理外,從廣泛意義上講,智慧農(nóng)業(yè)還包括農(nóng)業(yè)電子商務(wù)、食品溯源防偽、農(nóng)業(yè)休閑旅游、農(nóng)業(yè)信息服務(wù)等方面的內(nèi)容。
所謂“智慧農(nóng)業(yè)”就是充分應(yīng)用現(xiàn)代信息技術(shù)成果,集成應(yīng)用計算機與網(wǎng)絡(luò)技術(shù)、物聯(lián)網(wǎng)技術(shù)、音視頻技術(shù)、3S技術(shù)、無線通信技術(shù)及專家智慧與知識,實現(xiàn)農(nóng)業(yè)可視化遠程診斷、遠程控制、災(zāi)變預(yù)警等智能管理。

智慧農(nóng)業(yè)是農(nóng)業(yè)生產(chǎn)的高級階段,是集新興的互聯(lián)網(wǎng)、移動互聯(lián)網(wǎng)、云計算和物聯(lián)網(wǎng)技術(shù)為一體,依托部署在農(nóng)業(yè)生產(chǎn)現(xiàn)場的各種傳感節(jié)點(環(huán)境溫濕度、土壤水分、二氧化碳、圖像等)和無線通信網(wǎng)絡(luò)實現(xiàn)農(nóng)業(yè)生產(chǎn)環(huán)境的智能感知、智能預(yù)警、智能決策、智能分析、專家在線指導(dǎo),為農(nóng)業(yè)生產(chǎn)提供精準(zhǔn)化種植、可視化管理、智能化決策。
“智慧農(nóng)業(yè)”是云計算、傳感網(wǎng)、3S等多種信息技術(shù)在農(nóng)業(yè)中綜合、全面的應(yīng)用,實現(xiàn)更完備的信息化基礎(chǔ)支撐、更透徹的農(nóng)業(yè)信息感知、更集中的數(shù)據(jù)資源、更廣泛的互聯(lián)互通、更深入的智能控制、更貼心的公眾服務(wù)?!爸腔坜r(nóng)業(yè)”與現(xiàn)代生物技術(shù)、種植技術(shù)等科學(xué)技術(shù)融合于一體,對建設(shè)世界水平農(nóng)業(yè)具有重要意義。

本項目采用STM32F103ZET6 + ESP8266 設(shè)計一個智慧農(nóng)業(yè)管理系統(tǒng),能夠獲取空氣中的溫濕度數(shù)據(jù),光照度數(shù)據(jù)等,根據(jù)種植區(qū)的空氣溫濕度數(shù)據(jù),判斷是否進行灌溉;可以通過ESP8266 + MQTT 協(xié)議將采集的溫濕度、光照度上傳至騰訊云物聯(lián)網(wǎng)平臺,并推送到微信小程序上實時查看;可以在小程序上直接控制電機抽水灌溉。

硬件詳情介紹:

主控MCU: STM32F103ZET6

環(huán)境光傳感器: BH1750

濕度傳感器:SHT30

本地OLED顯示屏: 中景園電子0.96寸 SPI接口 OLED顯示屏

電機: 微型直流電機

三、創(chuàng)建騰訊云物聯(lián)網(wǎng)平臺設(shè)備并配置微信小程序

如果之前從來沒有使用過騰訊云物聯(lián)網(wǎng)平臺,創(chuàng)建的詳細步驟請看這里: STM32+ESP8266+MQTT協(xié)議連接騰訊物聯(lián)網(wǎng)開發(fā)平臺_DS小龍哥的專欄-CSDN博客_騰訊物聯(lián)網(wǎng)平臺

下面就是登錄騰訊云物聯(lián)網(wǎng)平臺,創(chuàng)建一個智慧農(nóng)業(yè)的設(shè)備的關(guān)鍵步驟,有些細節(jié)步驟沒寫,細節(jié)請看上面鏈接這篇文章。

官網(wǎng)地址:登錄 - 騰訊云

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

四、生成騰訊物聯(lián)網(wǎng)平臺的設(shè)備登錄信息

使用MQTT協(xié)議登錄需要一些參數(shù)信息,需要使用官網(wǎng)提供的方式生成。

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

Python示例代碼:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import base64
import hashlib
import hmac
import random
import string
import time
import sys
# 生成指定長度的隨機字符串
def RandomConnid(length):
    return  ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(length))
# 生成接入物聯(lián)網(wǎng)通信平臺需要的各參數(shù)
def IotHmac(productID, devicename, devicePsk):
     # 1. 生成 connid 為一個隨機字符串,方便后臺定位問題
     connid   = RandomConnid(5)
     # 2. 生成過期時間,表示簽名的過期時間,從紀(jì)元1970年1月1日 00:00:00 UTC 時間至今秒數(shù)的 UTF8 字符串
     expiry   = int(time.time()) + 30*24*60 * 60
     # 3. 生成 MQTT 的 clientid 部分, 格式為 ${productid}${devicename}
     clientid = "{}{}".format(productID, devicename)
     # 4. 生成 MQTT 的 username 部分, 格式為 ${clientid};${sdkappid};${connid};${expiry}
     username = "{};12010126;{};{}".format(clientid, connid, expiry)
     # 5. 對 username 進行簽名,生成token
     secret_key = devicePsk.encode('utf-8')  # convert to bytes
     data_to_sign = username.encode('utf-8')  # convert to bytes
     secret_key = base64.b64decode(secret_key)  # this is still bytes
     token = hmac.new(secret_key, data_to_sign, digestmod=hashlib.sha256).hexdigest()
     # 6. 根據(jù)物聯(lián)網(wǎng)通信平臺規(guī)則生成 password 字段
     password = "{};{}".format(token, "hmacsha256")
     return {
        "clientid" : clientid,
        "username" : username,
        "password" : password
     }
if __name__ == '__main__':
    # 參數(shù)分別填入: 產(chǎn)品ID,設(shè)備名稱,設(shè)備密匙
    print(IotHmac("6142CX41XE", "SmartAgriculture","20Y/aAcmj+y6SDDh+ANR9g=="))
poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

輸出的登錄參數(shù),用于MQTT協(xié)議填參數(shù):

{'clientid': '6142CX41XESmartAgriculture', 'username': '6142CX41XESmartAgriculture;12010126;HUA2G;1624271589', 
'password': 'a8aadebe9721f70e6f9e14fe56ff1d2b5cac9625fa1f96af2f0e0098597fe78b;hmacsha256'}
poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

五、使用MQTT軟件測試

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

設(shè)備主題發(fā)布與定義的格式:

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

設(shè)備消息數(shù)據(jù)上傳格式:

{"method":"report","clientToken":"123","params":{"light":78.4,"temperature":21.4,"humidity":60.8,"motor":1}}
poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

登錄成功之后,就可以看到設(shè)備在線:

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

打開微信小程序可以查看到設(shè)備上傳的數(shù)據(jù):

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

六、編寫STM32設(shè)備端代碼

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.pngpoYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

6.1 main.c代碼

#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
#include "key.h"
#include "usart.h"
#include 
#include "timer.h"
#include "esp8266.h"
#include "mqtt.h"
#include "oled.h"
#include "fontdata.h"
#include "bh1750.h"
#include "iic.h"
#include "sht3x.h"

/*
硬件連接方式:

ESP8266串口WIFI模塊與STM32的串口3相連接。
PB10--RXD 模塊接收腳
PB11--TXD 模塊發(fā)送腳
GND---GND 地
VCC---VCC 電源(3.3V~5.0V)

OLED接線:
D0----SCK-----PB14
D1----MOSI----PB13
RES—復(fù)位(低電平有效)—PB12
DC---數(shù)據(jù)和命令控制管腳—PB1
CS---片選引腳-----PA7

微型直流電機:  PB8
紫光燈:        PB9

LED硬件連接: PB5 PE5
KEY硬件連接:PE3 PE4
*/

#define ESP8266_WIFI_AP_SSID  "CMCC-Cqvn"   //將要連接的路由器名稱 --不要出現(xiàn)中文、空格等特殊字符
#define ESP8266_AP_PASSWORD "99pu58cb"     //將要連接的路由器密碼


//騰訊物聯(lián)網(wǎng)服務(wù)器的設(shè)備信息
#define MQTT_ClientID "6142CX41XESmartAgriculture"
#define MQTT_UserName "6142CX41XESmartAgriculture;12010126;HUA2G;1624271589"
#define MQTT_PassWord "a8aadebe9721f70e6f9e14fe56ff1d2b5cac9625fa1f96af2f0e0098597fe78b;hmacsha256"

//訂閱與發(fā)布的主題
#define SET_TOPIC  "$thing/down/property/6142CX41XE/SmartAgriculture"  //訂閱
#define POST_TOPIC "$thing/up/property/6142CX41XE/SmartAgriculture"  //發(fā)布


char mqtt_message[200];//上報數(shù)據(jù)緩存區(qū)
char OLED_ShowBuff[100];
u8 ESP8266_Stat=0;


/*
函數(shù)功能: 溫濕度\光強度顯示
*/
void ShowTemperatureAndHumidity(float temp,float humi,float light)
{
    sprintf(OLED_ShowBuff,"T: %.2f",temp);
	OLED_ShowString(40,16*0,16,OLED_ShowBuff); 
    sprintf(OLED_ShowBuff,"H: %.2f%%",humi);
	OLED_ShowString(40,16*1,16,OLED_ShowBuff);
    sprintf(OLED_ShowBuff,"L: %.2f%%",light);
	OLED_ShowString(40,16*2,16,OLED_ShowBuff); 
}

/*
函數(shù)功能: ESP8266顯示頁面
*/
void ESP8266_ShowPageTable(void)
{
    if(ESP8266_Stat)OLED_ShowString(0,16*0,16,"WIFI STAT:ERROR");
    else OLED_ShowString(0,16*0,16,"WIFI STAT:OK");

    //顯示字符串
    sprintf((char*)OLED_ShowBuff,"%s",ESP8266_WIFI_AP_SSID);
    OLED_ShowString(0,16*1,16,OLED_ShowBuff);	
    
    sprintf((char*)OLED_ShowBuff,"%s",ESP8266_AP_PASSWORD);   
    OLED_ShowString(0,16*2,16,OLED_ShowBuff);    
}


int main()
{
   u32 time_cnt=0;
   u32 i;
   u8 key;
   u8 page=0;
   float temp=0;
   float humi=0;
   float light=0;
   u8 motor_state=0;
   float Humidity;
   float Temperature;
    
   delay_ms(1000);
   delay_ms(1000);
    
   LED_Init();
   KEY_Init();
   IIC_Init();
    
    //OLED初始化
   OLED_Init(0xc8,0xa1); //OLED顯示屏初始化--正常顯示;
     //清屏
   OLED_Clear(0);
    
   USART1_Init(115200);
   TIMER1_Init(72,20000); //超時時間20ms

   USART3_Init(115200);//串口-WIFI
   TIMER3_Init(72,20000); //超時時間20ms
    
   Init_SHT30();
    
   USART1_Printf("正在初始化WIFI請稍等.\n");
   
   if(ESP8266_Init())
   {
      ESP8266_Stat=1;
      USART1_Printf("ESP8266硬件檢測錯誤.\n");  
   }
   else
   {
      //非加密端口
      USART1_Printf("WIFI:%d\n",ESP8266_STA_TCP_Client_Mode(ESP8266_WIFI_AP_SSID,ESP8266_AP_PASSWORD,"106.55.124.154",1883,1));
   }
   
    //2. MQTT協(xié)議初始化	
    MQTT_Init(); 
   
    //3. 連接騰訊云IOT服務(wù)器        
    while(MQTT_Connect(MQTT_ClientID,MQTT_UserName,MQTT_PassWord))
    {
        USART1_Printf("服務(wù)器連接失敗,正在重試...\n");
        delay_ms(500);
    }
    USART1_Printf("服務(wù)器連接成功.\n");
    
    
    //3. 訂閱主題
    if(MQTT_SubscribeTopic(SET_TOPIC,0,1))
    {
        USART1_Printf("主題訂閱失敗.\n");
    }
    else
    {
        USART1_Printf("主題訂閱成功.\n");
    }        
        
    while(1)
    {    
        //按鍵可以測試開鎖和關(guān)鎖
        key=KEY_Scan(0);
        if(key==1)
        {
            //清屏
            OLED_Clear(0);
            
            //翻頁
            if(page>=1)
            {
                page=0;
            }
            else
            {
                 page++;
            }         
        
            LED1=!LED1;  //LEd狀態(tài)燈
        }
        else if(key==2)
        {
            LED1=!LED1;  //LEd狀態(tài)燈
            time_cnt=0;
            //電機狀態(tài)改變
            MOTOR_DEV=!MOTOR_DEV;
            //電機狀態(tài)
            motor_state=MOTOR_DEV;
            //補光燈
            LIGHT_DEV=!LIGHT_DEV;      
        }  
        
        //微信小程序開鎖方式: 接收WIFI返回的數(shù)據(jù)
        if(USART3_RX_FLAG)
        {
            USART3_RX_BUFFER[USART3_RX_CNT]='\0';
            
            //向串口打印微信小程序返回的數(shù)據(jù)
            for(i=0;i5)
            {
                //使用字符串查找函數(shù)
                if(strstr((char*)&USART3_RX_BUFFER[5],""motor":1"))
                {
                     LED1=0;  //亮燈
                     MOTOR_DEV=1; //開電機
                     motor_state=1;
                }
                else if(strstr((char*)&USART3_RX_BUFFER[5],""motor":0"))
                {
                    LED1=1;  //滅燈
                    MOTOR_DEV=0; //關(guān)電機
                    motor_state=0;
                }
            }
           
            USART3_RX_CNT=0;
            USART3_RX_FLAG=0;
        }
              
        //定時與保持與微信小程序的同步--1秒一次
        delay_ms(10);
        time_cnt++;
        if(time_cnt==50)
        {
            time_cnt=0;
            
            //狀態(tài)燈 --表示程序還活著
            LED2=!LED2;
            
            //讀取光強度
            light=Read_BH1750_Data();
           
            //讀取溫濕度
            SHT3x_ReadData(&Humidity,&Temperature);
            humi=Humidity;
            temp=Temperature;
            
            //上傳數(shù)據(jù)
             sprintf(mqtt_message,"{"method":"report","clientToken":"123","params":{"temperature":%f,"humidity":%f,"motor":%d,"light":%f}}",
            temp,humi,motor_state,light);
            MQTT_PublishData(POST_TOPIC,mqtt_message,0);
            //根據(jù)濕度自動灌溉
            if(humi<50.0)  //小于50自動灌溉
            {
                 motor_state=1; //電機狀態(tài)更新
                 MOTOR_DEV=1;  //開電機
            } 
        }
         
        //OLED顯示屏
        if(page==0)
        {
            ShowTemperatureAndHumidity(temp,humi,light);
        }
        else if(page==1)
        {
            ESP8266_ShowPageTable();
        }
    }
}

;i++)>
poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

6.2 mqtt.c 代碼

#include "mqtt.h"

u8 *mqtt_rxbuf;
u8 *mqtt_txbuf;
u16 mqtt_rxlen;
u16 mqtt_txlen;
u8 _mqtt_txbuf[256];//發(fā)送數(shù)據(jù)緩存區(qū)
u8 _mqtt_rxbuf[256];//接收數(shù)據(jù)緩存區(qū)

typedef enum
{
	//名字 	    值 			報文流動方向 	描述
	M_RESERVED1	=0	,	//	禁止	保留
	M_CONNECT		,	//	客戶端到服務(wù)端	客戶端請求連接服務(wù)端
	M_CONNACK		,	//	服務(wù)端到客戶端	連接報文確認
	M_PUBLISH		,	//	兩個方向都允許	發(fā)布消息
	M_PUBACK		,	//	兩個方向都允許	QoS 1消息發(fā)布收到確認
	M_PUBREC		,	//	兩個方向都允許	發(fā)布收到(保證交付第一步)
	M_PUBREL		,	//	兩個方向都允許	發(fā)布釋放(保證交付第二步)
	M_PUBCOMP		,	//	兩個方向都允許	QoS 2消息發(fā)布完成(保證交互第三步)
	M_SUBSCRIBE		,	//	客戶端到服務(wù)端	客戶端訂閱請求
	M_SUBACK		,	//	服務(wù)端到客戶端	訂閱請求報文確認
	M_UNSUBSCRIBE	,	//	客戶端到服務(wù)端	客戶端取消訂閱請求
	M_UNSUBACK		,	//	服務(wù)端到客戶端	取消訂閱報文確認
	M_PINGREQ		,	//	客戶端到服務(wù)端	心跳請求
	M_PINGRESP		,	//	服務(wù)端到客戶端	心跳響應(yīng)
	M_DISCONNECT	,	//	客戶端到服務(wù)端	客戶端斷開連接
	M_RESERVED2		,	//	禁止	保留
}_typdef_mqtt_message;

//連接成功服務(wù)器回應(yīng) 20 02 00 00
//客戶端主動斷開連接 e0 00
const u8 parket_connetAck[] = {0x20,0x02,0x00,0x00};
const u8 parket_disconnet[] = {0xe0,0x00};
const u8 parket_heart[] = {0xc0,0x00};
const u8 parket_heart_reply[] = {0xc0,0x00};
const u8 parket_subAck[] = {0x90,0x03};

void MQTT_Init(void)
{
    //緩沖區(qū)賦值
	mqtt_rxbuf = _mqtt_rxbuf;
    mqtt_rxlen = sizeof(_mqtt_rxbuf);
	mqtt_txbuf = _mqtt_txbuf;
    mqtt_txlen = sizeof(_mqtt_txbuf);
	memset(mqtt_rxbuf,0,mqtt_rxlen);
	memset(mqtt_txbuf,0,mqtt_txlen);
	
	//無條件先主動斷開
	MQTT_Disconnect();
    delay_ms(100);
	MQTT_Disconnect();
    delay_ms(100);
}

/*
函數(shù)功能: 登錄服務(wù)器
函數(shù)返回值: 0表示成功 1表示失敗
*/
u8 MQTT_Connect(char *ClientID,char *Username,char *Password)
{
    u8 i,j;
    int ClientIDLen = strlen(ClientID);
    int UsernameLen = strlen(Username);
    int PasswordLen = strlen(Password);
    int DataLen;
	mqtt_txlen=0;
	//可變報頭+Payload  每個字段包含兩個字節(jié)的長度標(biāo)識
    DataLen = 10 + (ClientIDLen+2) + (UsernameLen+2) + (PasswordLen+2);
	
	//固定報頭
	//控制報文類型
    mqtt_txbuf[mqtt_txlen++] = 0x10;		//MQTT Message Type CONNECT
	//剩余長度(不包括固定頭部)
	do
	{
		u8 encodedByte = DataLen % 128;
		DataLen = DataLen / 128;
		// if there are more data to encode, set the top bit of this byte
		if ( DataLen > 0 )
			encodedByte = encodedByte | 128;
		mqtt_txbuf[mqtt_txlen++] = encodedByte;
	}while ( DataLen > 0 );
    	
	//可變報頭
	//協(xié)議名
    mqtt_txbuf[mqtt_txlen++] = 0;        	// Protocol Name Length MSB    
    mqtt_txbuf[mqtt_txlen++] = 4;           // Protocol Name Length LSB    
    mqtt_txbuf[mqtt_txlen++] = 'M';        	// ASCII Code for M    
    mqtt_txbuf[mqtt_txlen++] = 'Q';        	// ASCII Code for Q    
    mqtt_txbuf[mqtt_txlen++] = 'T';        	// ASCII Code for T    
    mqtt_txbuf[mqtt_txlen++] = 'T';        	// ASCII Code for T    
	//協(xié)議級別
    mqtt_txbuf[mqtt_txlen++] = 4;        		// MQTT Protocol version = 4   對于 3.1.1 版協(xié)議,協(xié)議級別字段的值是 4(0x04)   
	//連接標(biāo)志
    mqtt_txbuf[mqtt_txlen++] = 0xc2;        	// conn flags 
    mqtt_txbuf[mqtt_txlen++] = 0;        		// Keep-alive Time Length MSB    
    mqtt_txbuf[mqtt_txlen++] = 100;        	// Keep-alive Time Length LSB  100S心跳包    保活時間
	
    mqtt_txbuf[mqtt_txlen++] = BYTE1(ClientIDLen);// Client ID length MSB    
    mqtt_txbuf[mqtt_txlen++] = BYTE0(ClientIDLen);// Client ID length LSB  	
	memcpy(&mqtt_txbuf[mqtt_txlen],ClientID,ClientIDLen);
    mqtt_txlen += ClientIDLen;
    
    if(UsernameLen > 0)
    {   
        mqtt_txbuf[mqtt_txlen++] = BYTE1(UsernameLen);		//username length MSB    
        mqtt_txbuf[mqtt_txlen++] = BYTE0(UsernameLen);    	//username length LSB    
		memcpy(&mqtt_txbuf[mqtt_txlen],Username,UsernameLen);
        mqtt_txlen += UsernameLen;
    }
    
    if(PasswordLen > 0)
    {    
        mqtt_txbuf[mqtt_txlen++] = BYTE1(PasswordLen);		//password length MSB    
        mqtt_txbuf[mqtt_txlen++] = BYTE0(PasswordLen);    	//password length LSB  
		memcpy(&mqtt_txbuf[mqtt_txlen],Password,PasswordLen);
        mqtt_txlen += PasswordLen; 
    }    
	
  
    memset(mqtt_rxbuf,0,mqtt_rxlen);
    MQTT_SendBuf(mqtt_txbuf,mqtt_txlen);
    for(j=0;j<10;j++)
    {
        delay_ms(50);
        if(USART3_RX_FLAG)
        {
            memcpy((char *)mqtt_rxbuf,USART3_RX_BUFFER,USART3_RX_CNT);
            
            //memcpy
           
             for(i=0;i;i++)usart1_printf("%#x>
poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

本項目完整代碼下載地址:https://download.csdn.net/download/xiaolong1126626497/18973282

審核編輯:符乾江?

;i++)usart1_printf("%#x>
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • STM32
    +關(guān)注

    關(guān)注

    2301

    文章

    11073

    瀏覽量

    369366
  • 智慧農(nóng)業(yè)
    +關(guān)注

    關(guān)注

    4

    文章

    847

    瀏覽量

    21000
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    請問一下我想用ESP8685直接替換ESP8266而不用寫程序,可以讓ESP8685直接通過之前ESP8266的外掛的flash運行程序

    請問一下我想用ESP8685直接替換ESP8266而不用寫程序,可以讓ESP8685直接通過之前ESP8266的外掛的flash運行
    發(fā)表于 09-17 12:06

    智慧農(nóng)業(yè)節(jié)水灌溉聯(lián)網(wǎng)系統(tǒng)方案

    聯(lián)網(wǎng)系統(tǒng)成為必然趨勢。 通博聯(lián)以水利數(shù)采網(wǎng)關(guān)為核心,針對灌區(qū)場景打造智慧農(nóng)業(yè)節(jié)水灌溉
    的頭像 發(fā)表于 08-28 15:25 ?424次閱讀
    <b class='flag-5'>智慧</b><b class='flag-5'>農(nóng)業(yè)</b>節(jié)水灌溉<b class='flag-5'>物</b><b class='flag-5'>聯(lián)網(wǎng)</b>系統(tǒng)方案

    智慧農(nóng)業(yè)聯(lián)網(wǎng)管理平臺解決方案

    。 智慧農(nóng)業(yè)應(yīng)運而生,它依托聯(lián)網(wǎng)、大數(shù)據(jù)、云計算、人工智能等前沿技術(shù),對農(nóng)業(yè)生產(chǎn)的全流程進行智能化、精準(zhǔn)化管控,徹底革新了傳統(tǒng)
    的頭像 發(fā)表于 07-21 16:35 ?340次閱讀
    <b class='flag-5'>智慧</b><b class='flag-5'>農(nóng)業(yè)</b><b class='flag-5'>物</b><b class='flag-5'>聯(lián)網(wǎng)</b>管理平臺解決方案

    STM32+esp8266連接機智云,上傳溫濕度數(shù)據(jù)并控制繼電器開關(guān)(平臺配置、代碼生成、代碼移植)

    本教程將詳細介紹如何將STM32微控制器與ESP8266Wi-Fi模塊連接到機智云平臺,實現(xiàn)溫濕度數(shù)據(jù)的上傳與繼電器的遠程控制。通過此過程,您將學(xué)會如何配置機智云平臺,燒錄ESP8266固件,移植
    的頭像 發(fā)表于 07-15 18:54 ?538次閱讀
    <b class='flag-5'>STM32+esp8266</b>連接機智云,上傳溫濕度數(shù)據(jù)并控制繼電器開關(guān)(平臺配置、代碼生成、代碼移植)

    智慧農(nóng)業(yè)聯(lián)網(wǎng)解決方案以及應(yīng)用場景

    隨著科技的不斷進步與農(nóng)業(yè)現(xiàn)代化的深入發(fā)展,傳統(tǒng)農(nóng)業(yè)生產(chǎn)模式逐漸暴露出效率低、資源浪費嚴(yán)重、環(huán)境可控性差等問題。智慧農(nóng)業(yè)
    的頭像 發(fā)表于 06-27 11:23 ?383次閱讀

    聯(lián)網(wǎng)的應(yīng)用范圍有哪些?

    與及時維護,提高醫(yī)院的運營效率。 農(nóng)業(yè)生產(chǎn):智慧農(nóng)業(yè)利用聯(lián)網(wǎng)實現(xiàn)精準(zhǔn)種植與養(yǎng)殖。在農(nóng)業(yè)種植中,
    發(fā)表于 06-16 16:01

    基于STM32 HAL庫與標(biāo)準(zhǔn)庫的esp8266接入機智云方案(二)

    在《基于STM32HAL庫與標(biāo)準(zhǔn)庫的esp8266接入機智云方案(一)》中,我們詳細介紹了硬件連接和機智云客戶端的創(chuàng)建。本篇將重點講解如何下載代碼、分析下載的代碼,并直接使用這些代碼連接機智云。同時
    的頭像 發(fā)表于 05-28 18:02 ?927次閱讀
    基于<b class='flag-5'>STM32</b> HAL庫與標(biāo)準(zhǔn)庫的<b class='flag-5'>esp8266</b>接入機智云方案(二)

    ESP8266燒錄與機智云一鍵配網(wǎng)教程

    ESP8266模塊因其低成本和高性能,廣泛應(yīng)用于智能家居和工業(yè)自動化等領(lǐng)域。機智云平臺提供了一鍵配網(wǎng)功能,簡化了設(shè)備的聯(lián)網(wǎng)過程。本教程將詳細介紹如何使用ESP8266進行燒錄,并通過機智云實現(xiàn)一鍵配
    的頭像 發(fā)表于 05-24 11:04 ?1170次閱讀
    <b class='flag-5'>ESP8266</b>燒錄與機智云一鍵配網(wǎng)教程

    智慧消防聯(lián)網(wǎng)平臺

    本人想建立一個聯(lián)網(wǎng)智慧消防平臺,想找懂技術(shù)的有合伙意愿的共同投資開發(fā),有感興趣的聯(lián)系我13633612945
    發(fā)表于 04-15 22:18

    零知開源——ESP8266+MPU6050 實現(xiàn)運動姿態(tài)檢測

    零知ESP8266的I2C通信 ? ? ? ?在運動姿態(tài)檢測、機器人平衡控制、VR頭戴設(shè)備等應(yīng)用中,MPU6050(三軸加速度計+三軸陀螺儀)是一個常見的姿態(tài)傳感器。而ESP8266作為一款低功耗
    的頭像 發(fā)表于 02-20 17:54 ?2555次閱讀
    零知開源——<b class='flag-5'>ESP8266</b>+MPU6050 實現(xiàn)運動姿態(tài)檢測

    STM32ESP32應(yīng)該學(xué)哪個

    等等,市場占有率也很高。 ESP32相對年輕了不少,滿打滿算也不到 10 歲,他的前身,還得從 ESP8266 說起,都屬于樂鑫科技的產(chǎn)品。 如果你用單片機做過一些聯(lián)網(wǎng)產(chǎn)品,那多多少
    的頭像 發(fā)表于 02-18 09:52 ?939次閱讀

    智慧農(nóng)業(yè)LoRa遠程監(jiān)控聯(lián)網(wǎng)解決方案

    適宜的生長環(huán)境,從而提高農(nóng)作物的產(chǎn)量和品質(zhì),降低生產(chǎn)成本,實現(xiàn)農(nóng)業(yè)生產(chǎn)的智能化、信息化和高效化。 基于聯(lián)網(wǎng)、云計算與LoRa無線通信等技術(shù),通博聯(lián)提供
    的頭像 發(fā)表于 01-15 16:16 ?953次閱讀
    <b class='flag-5'>智慧</b><b class='flag-5'>農(nóng)業(yè)</b>LoRa遠程監(jiān)控<b class='flag-5'>物</b><b class='flag-5'>聯(lián)網(wǎng)</b>解決方案

    農(nóng)業(yè)聯(lián)網(wǎng):助力智慧農(nóng)業(yè)發(fā)展

    在科技日新月異的今天,農(nóng)業(yè)聯(lián)網(wǎng)作為智慧農(nóng)業(yè)的重要組成部分,正在改變著傳統(tǒng)農(nóng)業(yè)的面貌。
    的頭像 發(fā)表于 12-12 15:13 ?578次閱讀

    ESP8266筆記-05.ESP8266 WIFI的使用

    ESP8266是怎么火起來的?毫無疑問就是他把WIFI模塊的價格成功的打了下來,在我第一次看到ESP8266僅僅10元成本的開發(fā)板竟然可以連接WIFI時,知道對我幼小的心靈造成多大的震撼嗎?一度帶
    發(fā)表于 10-31 18:33

    esp8266加入到c51單片機單通道程序怎么寫

    要將ESP8266模塊加入到C51單片機的單通道程序中,您需要了解如何通過串行通信(UART)與ESP8266進行通信。以下是如何實現(xiàn)這一點的步驟和示例代碼。 步驟 1:硬件連接 首先,您需要
    的頭像 發(fā)表于 10-18 11:32 ?1977次閱讀