女人被狂躁到高潮视频免费无遮挡,内射人妻骚骚骚,免费人成小说在线观看网站,九九影院午夜理论片少妇,免费av永久免费网址

當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]最近項(xiàng)目需要,stm32上面使用到mqtt了,百度了下,發(fā)現(xiàn)網(wǎng)上資料還是挺少的,雖然有幾份相關(guān)的資料,下載下來(lái)之后,看到了mqtt的底層代碼竟然還有錯(cuò)誤,這個(gè)問(wèn)題導(dǎo)致了我后面一直調(diào)試不通,后來(lái),我直接從官方下載了m

最近項(xiàng)目需要,stm32上面使用到mqtt了,百度了下,發(fā)現(xiàn)網(wǎng)上資料還是挺少的,雖然有幾份相關(guān)的資料,下載下來(lái)之后,看到了mqtt的底層代碼竟然還有錯(cuò)誤,這個(gè)問(wèn)題導(dǎo)致了我后面一直調(diào)試不通,后來(lái),我直接從官方下載了mqtt的源碼用比較器比較后找到了原因,最后果斷將官方的mqtt底層代碼移植上來(lái),mqtt的發(fā)布還是比較順利,訂閱雖然可以收到消息,但是由于沒(méi)有移植os,發(fā)布消息時(shí),訂閱接受有時(shí)無(wú)法收到消息,這個(gè)還在優(yōu)化,我使用的是stm32f103c8t6平臺(tái)+w5500.其實(shí)只要帶以太網(wǎng)接口就行。首先我們從mqtt官方下載源碼
http://git.eclipse.org/c/paho/org.eclipse.paho.mqtt.embedded-c.git/refs/
下載后將MQTTPacket下面的src文件都加入到自己的MDK工程中。


如果采用W5500的話,最好先用官方的TCP例子將TCP調(diào)試通,而且能保證訪問(wèn)外網(wǎng),可以借鑒下網(wǎng)上那個(gè)STM32F405+W5500的例子,我覺(jué)得那個(gè)還是挺好的,我也是主要借鑒了那個(gè)例子,不過(guò)我還是不太喜歡他把TCP的建立封裝到mqtt里面,一開(kāi)始我也是采用他那種方法,不過(guò)一直出錯(cuò),后來(lái)我采用了狀態(tài)機(jī)實(shí)現(xiàn),先讓TCP和mqtt服務(wù)器建立TCP連接在調(diào)用mqtt的連接,發(fā)布等API,這樣比較好調(diào)試。調(diào)試的話,我采用的是下面那個(gè)頁(yè)面調(diào)試的http://m2m.demos.ibm.com/mqttclient/#log

其實(shí)真正要你實(shí)現(xiàn)的mqtt接口,主要是transport.c里面的幾個(gè)API
int transport_sendPacketBuffer(unsigned char* buf, int buflen)
{
return send(SOCK_MQTT,buf,buflen);
}
/**
* @brief×èè?·?ê??óê?TCP·t???÷·¢?íμ?êy?Y
* @parambuf êy?Y′?′¢ê×μ??·
* @paramcount êy?Y?o3???3¤?è
* @retval D?óú0±íê??óê?êy?Yê§°ü
*/
int transport_getdata(unsigned char* buf, int count)
{
return recv(SOCK_MQTT,buf,count);
}


/**
* @brief′ò?aò???socket2¢á??óμ?·t???÷
* @param?T
* @retval D?óú0±íê?′ò?aê§°ü
*/
int transport_open(void)
{
int32_t ret;
//D??¨ò???Socket2¢°ó?¨±?μ????ú5000
ret = socket(SOCK_MQTT,Sn_MR_TCP,4500,Sn_MR_ND);
if(ret != SOCK_OK){
printf("%d:Socket Errorrn",SOCK_MQTT);
}else{
printf("%d:Openedrn",SOCK_MQTT);
}

//á??óTCP·t???÷
ret = connect(SOCK_MQTT,domain_ip,1883);//???ú±?D??a1883
if(ret != SOCK_OK){
printf("%d:Socket Connect Errorrn",SOCK_MQTT);
}else{
printf("%d:Connectedrn",SOCK_MQTT);
}
return ret;
}
/**
* @brief1?±?socket
* @param?T
* @retval D?óú0±íê?1?±?ê§°ü
*/
int transport_close(void)
{
close(SOCK_MQTT);
return 0;
}

以上的其實(shí)transport_open(void)我沒(méi)調(diào)用,讓狀態(tài)機(jī)來(lái)實(shí)現(xiàn)了這步。
int mqtt_publish(char *pTopic,char *pMessage)
{
int32_t len,rc;
MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
unsigned char buf[200];
MQTTString topicString = MQTTString_initializer;
int msglen = strlen(pMessage);
int buflen = sizeof(buf);
data.clientID.cstring = "Client74925";
data.keepAliveInterval = 15;
data.cleansession = 1;
len = MQTTSerialize_connect(buf, buflen, &data); /* 1 */
topicString.cstring = pTopic;
len += MQTTSerialize_publish(buf + len, buflen - len, 0, 0, 0, 0, topicString, (unsigned char*)pMessage, msglen); /* 2 */
len += MQTTSerialize_disconnect(buf + len, buflen - len); /* 3 */
rc = transport_sendPacketBuffer(buf,len);
if (rc == len)
printf("Successfully publishednr");
else
printf("Publish failednr");
return 0;
}

=========================================

void do_tcp_client(void)
{
uint8 connect_State = 0;
uint16 len1;
switch(getSn_SR(SOCK_MQTT)) /*??è?socketμ?×′ì?*/
{
case SOCK_CLOSED: /*socket′|óú1?±?×′ì?*/
socket(SOCK_MQTT,Sn_MR_TCP,local_port++,Sn_MR_ND);
break;
case SOCK_INIT: /*socket′|óú3?ê??ˉ×′ì?*/
connect(SOCK_MQTT,domain_ip,1883); /*socketá??ó·t???÷*/
break;
case SOCK_ESTABLISHED: /*socket′|óúá??ó?¨á¢×′ì?*/
memset(buff,0,500);
#if 0
connect_State=mqtt_subscrib("planets/earth",buff);
if(connect_State)
{
printf("%s",buff);

}
#endif
if(heartbeatflag>=TIME_5S)
{
heartbeatflag=0;
mqtt_publish("planets/earth","firstName: Brett, lastName:McLaughlin,email:aaaa");
}
break;
case SOCK_CLOSE_WAIT: /*socket′|óúμè′y1?±?×′ì?*/
close(SOCK_MQTT);
break;

}
}
上面的發(fā)布我每5s發(fā)送一條消息,公司的電腦加密了,無(wú)法截圖,只能copy下網(wǎng)頁(yè)測(cè)試的數(shù)據(jù)
============================================================================
(06:23:57.487) >> [planets/earth] firstName: Brett, lastName:McLaughlin,email:aaaa(06:24:02.492) >> [planets/earth] firstName: Brett, lastName:McLaughlin,email:aaaa(06:24:02.810) >> [planets/earth][retained] Hello world!(06:24:02.810) Subscribed to [planets/earth][qos 0](06:24:07.501) >> [planets/earth] firstName: Brett, lastName:McLaughlin,email:aaaa(06:24:12.497) >> [planets/earth] firstName: Brett, lastName:McLaughlin,email:aaaa(06:24:17.490) >> [planets/earth] firstName: Brett, lastName:McLaughlin,email:aaaa(06:24:22.490) >> [planets/earth] firstName: Brett, lastName:McLaughlin,email:aaaa(06:24:27.491) >> [planets/earth] firstName: Brett, lastName:McLaughlin,email:aaaa(06:24:32.481) >> [planets/earth] firstName: Brett, lastName:McLaughlin,email:aaaa(06:24:37.490) >> [planets/earth] firstName: Brett, lastName:McLaughlin,email:aaaa(06:24:42.497) >> [planets/earth] firstName: Brett, lastName:McLaughlin,email:aaaa(06:24:47.491) >> [planets/earth] firstName: Brett, lastName:McLaughlin,email:aaaa
訂閱消息的函數(shù)目前暫且不公布,主要是還在優(yōu)化,其次我覺(jué)得有點(diǎn)雞肋,以其誤導(dǎo)大伙,還不如不公開(kāi)~~~~~~~~~~~~,如果大伙覺(jué)得有意思,可以把mqtt的ping也加上去,如果實(shí)用的話,這個(gè)還需要加入很多容錯(cuò)機(jī)制~~~~~~~~~~~~

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

在嵌入式開(kāi)發(fā)中,STM32的時(shí)鐘系統(tǒng)因其靈活性和復(fù)雜性成為開(kāi)發(fā)者關(guān)注的焦點(diǎn)。然而,看似簡(jiǎn)單的時(shí)鐘配置背后,隱藏著諸多易被忽視的陷阱,輕則導(dǎo)致系統(tǒng)不穩(wěn)定,重則引發(fā)硬件損壞。本文從時(shí)鐘源選擇、PLL配置、總線時(shí)鐘分配等關(guān)鍵環(huán)...

關(guān)鍵字: STM32 時(shí)鐘系統(tǒng)

在嵌入式系統(tǒng)開(kāi)發(fā)中,STM32系列微控制器的內(nèi)部溫度傳感器因其低成本、高集成度特性,廣泛應(yīng)用于設(shè)備自檢、環(huán)境監(jiān)測(cè)等場(chǎng)景。然而,受芯片工藝差異和電源噪聲影響,其原始數(shù)據(jù)存在±1.5℃的固有誤差。本文從硬件配置、校準(zhǔn)算法、軟...

關(guān)鍵字: STM32 溫度傳感器

在能源效率與智能化需求雙重驅(qū)動(dòng)下,AC-DC轉(zhuǎn)換器的數(shù)字控制技術(shù)正經(jīng)歷從傳統(tǒng)模擬方案向全數(shù)字架構(gòu)的深刻變革?;赟TM32微控制器的PFM(脈沖頻率調(diào)制)+PWM(脈沖寬度調(diào)制)混合調(diào)制策略,結(jié)合動(dòng)態(tài)電壓調(diào)整(Dynam...

關(guān)鍵字: AC-DC STM32

當(dāng)前智能家居產(chǎn)品需求不斷增長(zhǎng) ,在這一背景下 ,對(duì)現(xiàn)有澆花裝置缺陷進(jìn)行了改進(jìn) ,設(shè)計(jì)出基于STM32單片機(jī)的全 自動(dòng)家用澆花機(jī)器人。該設(shè)計(jì)主要由機(jī)械結(jié)構(gòu)和控制系統(tǒng)構(gòu)成 ,機(jī)械結(jié)構(gòu)通過(guò)麥克納姆輪底盤(pán)與噴灑裝置的結(jié)合實(shí)現(xiàn)機(jī)器...

關(guān)鍵字: STM32 麥克納姆輪 安全可靠 通過(guò)性強(qiáng)

用c++編程似乎是讓你的Arduino項(xiàng)目起步的障礙嗎?您想要一種更直觀的微控制器編程方式嗎?那你需要了解一下Visuino!這個(gè)圖形化編程平臺(tái)將復(fù)雜電子項(xiàng)目的創(chuàng)建變成了拖動(dòng)和連接塊的簡(jiǎn)單任務(wù)。在本文中,我們將帶您完成使...

關(guān)鍵字: Visuino Arduino ESP32 STM32

基于STM32與LoRa技術(shù)的無(wú)線傳感網(wǎng)絡(luò)憑借其低功耗、廣覆蓋、抗干擾等特性,成為環(huán)境監(jiān)測(cè)、工業(yè)自動(dòng)化等場(chǎng)景的核心解決方案。然而,如何在復(fù)雜電磁環(huán)境中實(shí)現(xiàn)高效休眠調(diào)度與動(dòng)態(tài)信道優(yōu)化,成為提升網(wǎng)絡(luò)能效與可靠性的關(guān)鍵挑戰(zhàn)。本...

關(guān)鍵字: STM32 LoRa

在實(shí)時(shí)控制系統(tǒng)、高速通信協(xié)議處理及高精度數(shù)據(jù)采集等對(duì)時(shí)間敏感的應(yīng)用場(chǎng)景中,中斷響應(yīng)延遲的優(yōu)化直接決定了系統(tǒng)的可靠性與性能上限。STM32系列微控制器憑借其靈活的嵌套向量中斷控制器(NVIC)、多通道直接內(nèi)存訪問(wèn)(DMA)...

關(guān)鍵字: STM32 DMA

數(shù)字電源技術(shù)向高功率密度、高效率與高動(dòng)態(tài)響應(yīng)方向加速演進(jìn),STM32微控制器憑借其基于DSP庫(kù)的算法加速能力與對(duì)LLC諧振變換器的精準(zhǔn)控制架構(gòu),成為優(yōu)化電源動(dòng)態(tài)性能的核心平臺(tái)。相較于傳統(tǒng)模擬控制或通用型數(shù)字控制器,STM...

關(guān)鍵字: STM32 數(shù)字電源

STM32微控制器憑借其針對(duì)電機(jī)控制場(chǎng)景的深度優(yōu)化,成為高精度、高可靠性驅(qū)動(dòng)系統(tǒng)的核心選擇。相較于通用型MCU,STM32在電機(jī)控制領(lǐng)域的核心優(yōu)勢(shì)集中體現(xiàn)在FOC(磁場(chǎng)定向控制)算法的硬件加速引擎與PWM死區(qū)時(shí)間的動(dòng)態(tài)補(bǔ)...

關(guān)鍵字: STM32 電機(jī)控制

無(wú)線充電技術(shù)加速滲透消費(fèi)電子與汽車電子領(lǐng)域,基于Qi協(xié)議的無(wú)線充電發(fā)射端開(kāi)發(fā)成為智能設(shè)備能量補(bǔ)給的核心課題。傳統(tǒng)模擬控制方案存在響應(yīng)滯后、參數(shù)調(diào)整困難等問(wèn)題,而基于STM32的數(shù)字PID控制結(jié)合FOD(Foreign O...

關(guān)鍵字: STM32 無(wú)線充電
關(guān)閉