日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

STM32单片机介绍_单片机智能控制DIY

發布時間:2023/12/19 综合教程 35 生活家
生活随笔 收集整理的這篇文章主要介紹了 STM32单片机介绍_单片机智能控制DIY 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

STM32庫函數開發系列文章目錄

第一篇:STM32F103ZET6單片機雙串口互發程序設計與實現
第二篇:最簡單DIY基于STM32單片機的藍牙智能小車設計方案
第三篇:最簡單DIY基于STM32F407探索者開發板的MPU6050陀螺儀姿態控制舵機程序
第四篇:最簡單DIY基于STM32F407探索者開發板和PCA9685舵機控制模塊的紅外遙控機械臂控制程序
第五篇:注釋最詳細、代碼最簡單的STM32+攝像頭+顯示屏的顏色跟蹤電路軟硬件方案
第六篇:最簡單DIY基于STM32單片機的WIFI智能小車設計方案



前言

????daodanjishui物聯網核心原創技術之最簡單DIY基于STM32單片機的WIFI智能小車設計方案。
????市面上有各種開源STM32+ESP8266-01S的無線WIFI控制小車,但是有復雜的有簡單的,如果想快速入門STM32+ESP8266AT固件開發,這個方案會給你一個快捷高效的方案。


一、最簡單DIY基于STM32單片機的WIFI智能小車設計方案是什么?

????我記得本欄的第二篇博文:最簡單DIY基于STM32單片機的藍牙智能小車設計方案 的設計中大量使用了庫函數和別人的開源代碼,魯迅先生的“拿來主義”表現的淋漓盡致,這也是STM32庫函數開發的魅力所在,完成了串口藍牙通信實現了無線藍牙控制的小車。為了實現WIFI高速通信和物聯網技術的融合,所以誕生第六篇博文。
????這次的方案主要是:STM32F103C8T6單片機通過串口2發送AT指令控制ESP8266-1S與筆記本電腦的網絡調試助手通信,從而實現用網絡調試助手無線遙控單片機執行小車行進。下面請看全家福:

下圖中,左上角的是串口WIFI看模塊,右上角的是串口藍牙模塊,代碼風格有一點變動,不過照樣是同一個作者的勞動成果。

網絡調試助手控制小車的指令收發如下:

單片機串口1打印調試信息如下圖。(使用到本欄第一篇原創串口互發技術)

優酷視頻演示地址:https://v.youku.com/v_show/id_XNTE2NTg5OTM2MA==.html

最簡單DIY基于STM32單片機的WIFI智能小車設計方案


二、閉門造車日記

1.準備硬件和接線

采用雙層透明亞克力板結構,使用帶有數碼管顯示的電源,帶有獨立開關的L298N模塊,一片STM32F103C8T6作為主控,兩個18650高能鋰電池供電,一個ESP8266-01S串口WIFI模塊,三根銅柱把第二層的亞克力板撐起來了,整個小車結構都由我手工設計和搭建,看起來就像是一個藝術品。這次的小車功能拓展提高了很多,首先支持三個串口同時使用,我定義串口一作為串口調試使用,串口二作為與ESP8266進行通信使用,串口三留給買家自行擴展,需要注意的是:stm32觸發串口中斷需要加入 \r\n,串口2是與ESP8266模塊鏈接的,stm32的串口2中斷必須接收到\r\n 才能觸發串口中斷,十六進制就是 0d 0a,串口2收到的數據會通過串口1輸出到電腦串口調試助手,這樣用串口1可以調試程序,看看串口2的WIFI模塊是否接收到數據另外給串口1發送數據的話,串口1會返回相同的數據,同時串口1也往串口2發送數據,這樣也可以測試WIFI模塊是否能回復給電腦網絡調試助手服務器。



根據上面兩個截圖的
連接說明:串口1作為調試打印輸出,可以不接
串口2作為ESP8266-01S與STM32F103C8T6通信的接口,必須接入
所以STM32 的PA2作為TX端 連接8266的RX端
所以STM32 的PA3作為RX端 連接8266的TX端
ESP8266必須與STM32共地,ESP8266模塊供電3.3V
ESP8266的EN接3.3V
ESP8266的RST、IO0、IO2都不需要接線

STM32的 PA4 接L298N的第一個管腳PIN0
STM32的 PA5 接L298N的第一個管腳PIN1
STM32的 PA6 接L298N的第一個管腳PIN2
STM32的 PA7 接L298N的第一個管腳PIN3

或者是(不同的L298N模塊的編號可能不一樣)
STM32的 PA4 接L298N的第一個管腳PIN1
STM32的 PA5 接L298N的第一個管腳PIN2
STM32的 PA6 接L298N的第一個管腳PIN3
STM32的 PA7 接L298N的第一個管腳PIN4

2.設計過程

????代碼都是daodanjishui原創開源和親自測試驗證,保證了代碼精簡易懂,適合快速入門上手二次開發,核心技術知識點足夠多。為了這個作品,曾經的我把正點原子開源論壇關于ESP8266的帖子都看遍了!但是后面我上手SDK開發了,這電路是我對以前走的彎路進行一次致敬!
???? 為了發布小車開源方案,daodanjishui瘋狂閉門造車,每一個開源方案就造一部車,就有點像鋼鐵俠那樣瘋狂,一個成年人造這種車,要么是想掙錢,要么就是想玩。每次造車我都會用新的模塊去搭建,因為實在不想去拆解重裝了,還有一個原因就是:總有一天我會像鋼鐵俠電影那樣,用一個眼鏡或者是頭盔去同時集群控制這些玩意兒。這些小車的構造和程序都比較簡單,盡量不要涉及到過于復雜的編碼,但是又要體現出萬物互聯的精髓。一個人不管做什么事情,只要不斷重復做成一個體系那么就容易成功。
????說說這次電路的功能和特點:這次用網絡調試助手作為服務器控制WIFI智能小車,所以需要組建一個局域網,再也不用以前AP熱點的模式了,因為用STA模式,小車具有的功能更加容易擴展,后期我要加上WebSocket技術實現集群控制的,現在是在醞釀一個大招。代碼的風格沿用MDK5串口互發的基本框架,這個框架以前我作為免費開源的資料上傳電路城。最簡單DIY基于STM32單片機的藍牙智能小車設計方案 用的是串口1和2互發進行調試,這次也不例外,不過這次代碼復雜了很多,雖然也是用串口1和串口2,但是串口2控制ESP8266的程序移植和改進了正點原子的源碼,可以完美實現斷線重連服務器,摒棄了顯示屏的優點,還有心跳程序檢測連接的功能。特別是在心跳程序的地方 詳細注釋了如何使用定時器來檢測WIFI傳輸過程中出現問題的邏輯處理。WIFI開發采用了串口AT指令控制,這也是正點原子剛開始出WIFI教程時候的方式,雖然現在廣泛用Arduino 的ESP8266集成開發環境來開發,但是這個源碼是非常值得學習的,因為涉及到非常多的知識點。小車控制使用網絡調試助手指令去觸發小車運動,這樣更加直觀看到調試信息和減少買家掌握這個電路的難度。利用串口1的打印功能,讀者很容易掌握著代碼的精髓。

3.準備一份經典的STM32串口庫函數源碼

為了快速掌握讀者STM32串口通信,最后附上STM32串口庫函數源碼免費下載鏈接。
代碼如下(示例):

#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"
#include "usart2.h"
//串口實驗 
//技術支持:daodanjishui 
int main(void)
{ 
		
u8 t;
u8 len;	
u8 len2;	
delay_init();	    	 //延時函數初始化 
NVIC_Configuration(); 	 //設置NVIC中斷分組2:2位搶占優先級,2位響應優先級
uart_init(9600);	 //串口初始化為9600
uart2_init(9600);
//LED_Init(); //LED端口初始化
//KEY_Init(); //初始化與按鍵連接的硬件接口
while(1)
{ 

if(USART_RX_STA&0x8000)
{ 
					   
len=USART_RX_STA&0x3fff;//得到此次接收到的數據長度
/* //因為我這里要把氣象站的數據傳回來,所以不能直接返回數據給氣象站,否則可能出錯 printf("電腦 send to串口1的數據為:\r\n"); for(t=0;t<len;t++) { USART_SendData(USART1, USART_RX_BUF[t]);//單片機通過串口1發送數據給電腦 while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待發送結束 //printf("\r\n發送成功\r\n");//插入換行 } printf("\r\n");//插入換行 */
u2_printf("電腦 send to串口2的數據為:\r\n");		
for(t=0;t<len;t++)
{ 

USART_SendData(USART2, USART_RX_BUF[t]);//將串口1收到的數據轉發給串口2輸出
while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);//等待發送結束
}
u2_printf("\r\n");//插入換行
USART_RX_STA=0;
} 
if(USART2_RX_STA&0x8000)
{ 
					   
len2=USART2_RX_STA&0x3fff;//得到此次接收到的數據長度
u2_printf("電腦 send to串口2的數據為:\r\n");
for(t=0;t<len2;t++)
{ 

USART_SendData(USART2, USART2_RX_BUF[t]);//單片機通過串口2給電腦發數據
while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);//等待發送結束
}
u2_printf("\r\n");//插入換行 
//printf("電腦 send to串口1的數據為:\r\n");
printf("\r\n");//作為指令響應的開頭 
for(t=0;t<len2;t++)
{ 

USART_SendData(USART1, USART2_RX_BUF[t]);//將串口2收到的數據轉發給串口1輸出
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待發送結束
}			
printf("\r\n");//插入換行
USART2_RX_STA=0;
} 
}	 
}

4.修改源碼和組合源碼(這部分原創)

先看看代碼截圖:

代碼修改的地方如下:

工程目錄如下:

重點編寫串口2中斷處理程序(這里說明一下,跟本欄的藍牙控制小車的代碼和控制風格差不多):

 if(USART2_RX_STA&0X8000)		//接收到一次數據了
{ 
 
rlen=USART2_RX_STA&0X7FFF;	//得到本次接收到的數據長度
USART2_RX_BUF[rlen]=0;		//添加結束符 
//printf("%s",USART2_RX_BUF); //發送到串口 
printf("收到%d字節,內容如下\r\n",rlen);
printf("---%s\r\n",USART2_RX_BUF);
//sprintf((char*)p,"收到%d字節,內容如下",rlen);//接收到的字節數 
//在這里寫控制小車的邏輯
if(strstr((const char*)USART2_RX_BUF,"FFF")!=NULL){ 

flag=0;
}else if(strstr((const char*)USART2_RX_BUF,"BBB")!=NULL){ 

flag=1;
}else if(strstr((const char*)USART2_RX_BUF,"LLL")!=NULL){ 

flag=2;
}else if(strstr((const char*)USART2_RX_BUF,"RRR")!=NULL){ 

flag=3;
}else if(strstr((const char*)USART2_RX_BUF,"SSS")!=NULL){ 

flag=4;
}else  flag=4;
switch (flag)
{ 

case 0: { 

front(); 
printf("FFF\r\n");
//測試發送一個字符串
sprintf((char*)p,"FFF\r\n");		
u2_printf("AT+CIPSEND=0,%d\r\n",strlen((char*)p));//發送數據的AT指令,先寫指令后發送數據 
delay_ms(200);
atk_8266_send_data(p,"OK",100);  //發送指定長度的數據 
break;
}//串口收到前進
case 1: { 

back();
printf("BBB\r\n");
//測試發送一個字符串
sprintf((char*)p,"BBB\r\n");		
u2_printf("AT+CIPSEND=0,%d\r\n",strlen((char*)p));//發送數據的AT指令,先寫指令后發送數據 
delay_ms(200);
atk_8266_send_data(p,"OK",100);  //發送指定長度的數據 
break;
}
case 2: { 

left();
printf("LLL\r\n");
//測試發送一個字符串
sprintf((char*)p,"LLL\n");		
u2_printf("AT+CIPSEND=0,%d\r\n",strlen((char*)p));//發送數據的AT指令,先寫指令后發送數據 
delay_ms(200);
atk_8266_send_data(p,"OK",100);  //發送指定長度的數據 
break; 
}
case 3: { 

right();
printf("RRR\r\n");
//測試發送一個字符串
sprintf((char*)p,"RRR\r\n");		
u2_printf("AT+CIPSEND=0,%d\r\n",strlen((char*)p));//發送數據的AT指令,先寫指令后發送數據 
delay_ms(200);
atk_8266_send_data(p,"OK",100);  //發送指定長度的數據 
break;
}
case 4: { 

stop();
printf("SSS\r\n");
//測試發送一個字符串
sprintf((char*)p,"SSS\r\n");		
u2_printf("AT+CIPSEND=0,%d\r\n",strlen((char*)p));//發送數據的AT指令,先寫指令后發送數據 
delay_ms(200);
atk_8266_send_data(p,"OK",100);  //發送指定長度的數據 
break;
}	
default:{ 
 
stop();
printf("SSS\r\n");
//測試發送一個字符串
sprintf((char*)p,"SSS\r\n");		
u2_printf("AT+CIPSEND=0,%d\r\n",strlen((char*)p));//發送數據的AT指令,先寫指令后發送數據 
delay_ms(200);
atk_8266_send_data(p,"OK",100);  //發送指定長度的數據 
break;
}
}		
//車控制結束
USART2_RX_STA=0;
//receive_flag=1;
//if(constate!='+')t=1000; //狀態為還未連接,立即更新連接狀態
//if(constate!='+')t=300; //狀態為還未連接,立即更新連接狀態
//if(constate!='+')t=3; //狀態為還未連接,立即更新連接狀態
if(constate!='+')t=10;		//狀態為還未連接,立即更新連接狀態
else t=0;                   //狀態為已經連接了,10秒后再檢查
}  

說明:以上就是我關鍵的代碼,根據工程代碼截圖來看,代碼量大,另外也請讀者尊重原創,編寫源碼也花了不少的寶貴的時間的,尊重勞動成果,請下載我最后附錄上的工程代碼,工程代碼注釋詳細,代碼精簡。


# 三、運行與調試 (1)按照實物圖購買的模塊組裝成小車,L298N,電源模塊或者電源變壓器、電池夾和18650電池兩個, STM32F103C8T6最小系統板、ESP8266-01S、小車底座 一定要注意了:要把ESP8266-01S設置波特率為115200,否則不能與單片機通信,或者買家自行修改代碼的波特率讓兩個單片機通信的串口波特率一樣,否則玩完。 根據源碼接線,燒錄程序進單片機 大概的接線關系是wifi模塊接單片機的串口2

(2)電腦打開一個網絡調試助手,并且提前創建一個局域網熱點,保證讓小車和電腦都能連上。如下:

(3)修改MDK網絡連接的參數編譯代碼燒錄代碼:服務器的IP地址根據網絡調試助手生成的填寫,端口號寫死為8080,熱點名稱和密碼跟買家實際的參數修改

(4)打開串口調試助手調試小車的串口1,上電看看串口調試打印信息:

(5)看到連上服務器之后,在服務器發送一個指令:FFF 注意要發送換行回車\r\n作為結束符號,代碼就是這樣識別指令傳輸結束的。


(6)拔掉串口1調試線,小車下地測試遠程遙控。FFF前進,BBB后退,LLL左轉,RRR右轉,SSS停止。讀者可以親自測試,都是簡單的指令,很好入門的。

根據上面的調試與仿真,證明了該設計滿足了博文提出的要求。


總結

????總結:用ESP8266AT指令來連接服務器有一個好處是可以讓STM32做控制算法的處理,如果用ESP8266做通信又做算法處理,那么可能導致性能發揮有限。雖然ESP8266與STM32直接采用串口2相連速度有點慢,但是好處就是穩定,ESP8266跑的是網絡協議棧,STM32跑的是裸機程序,相互配合,程序相當穩定。做物聯網控制的買家可以很好參考我這個代碼來改造成智能WIFI插座、WIFI機器人、智能家居等等,如果你自己想自己去寫這種基礎性代碼,你會發現困難重重一點小問題就能困住你一整天,如果用我搭好的環境去開發將會事半功倍,可能全網還真找不到像我這樣WIFI智能小車的程序。
????下個智能小車專題,我會加入手機上位機和網頁上位機或者C# 上位機實現一些方便快捷的控制,再也不用網絡助手或者是串口調試助手去控制小車了。原創開源值得期待。

最后附上本博文代碼下載地址:https://www.cirmall.com/circuit/24707/
直接跳轉

STM32串口庫函數源碼相關代碼免費下載:https://www.cirmall.com/circuit/19782/
直接跳轉

總結

以上是生活随笔為你收集整理的STM32单片机介绍_单片机智能控制DIY的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩狠狠 | 午夜小影院 | 人人插人人插 | 伊人久久免费 | 日韩欧美亚洲 | 91精品久久久久久久99蜜桃 | 综合激情av | 在线免费精品视频 | 亚洲天堂视频网站 | 中文字幕一区二区三区在线视频 | 中文字幕+乱码+中文乱 | 久久一区二区电影 | 久久久久一区二区 | 国产日批视频在线观看 | 少妇喷水在线观看 | 夜夜草天天草 | 欧美丝袜一区二区 | a视频 | 免费看一级片 | 久热久色| 超碰国产人人 | 欧美精品1区 | 狠狠婷 | 精品嫩模一区二区三区 | 久久99久久久久久 | 欧美日韩卡一卡二 | 国产精彩视频一区 | 欧美另类videosbestsex日本 | 国产伦精品一区二区三区四区免费 | 亚洲午夜无码久久久久 | 日韩免费视频一区二区视频在线观看 | 青青草久久伊人 | 在线看日本 | a级成人毛片 | 男人插入女人下面视频 | 日韩av日韩| 巨胸挤奶视频www网站 | 妺妺窝人体色www在线下载 | 香蕉视频免费在线观看 | 欧美影院一区二区 | 深夜小视频在线观看 | 女人又爽又黄免费女仆 | 欧美黑人精品一区二区不卡 | 老司机在线观看视频 | 日本一本不卡 | 色免费看| 进去里在线观看 | 美女被爆操网站 | 男女日日| 爱爱短视频 | av资源网站 | 91国模少妇一区二区三区 | 天堂男人av| 夜夜操天天操 | 毛片大全在线观看 | 久久久久青草 | 国产 中文 字幕 日韩 在线 | 极品销魂美女少妇尤物 | 亚洲一级黄色大片 | 日韩在线第一区 | 理论片一级 | 久久国产激情 | 理论片av| 成人网视频 | 在线播放无码后入内射少妇 | 黄色99 | 国产a网站| 国产69精品久久 | 国产成人精品无码播放 | 久久理论电影 | 成人福利在线免费观看 | 免费一级a毛片夜夜看 | 日韩一级免费视频 | 一道本一区 | 一曲二曲三曲在线观看中文字幕动漫 | 国产美女一区 | 韩日av在线 | 天天操综合 | 国产chinese | 免费看片亚洲 | 久久久精品美女 | 91福利专区| 成人激情四射网 | 国产午夜精品久久久久久久久久 | 国产精品拍拍 | 欧美乱大交 | 亚洲aaaa级特黄毛片 | 日韩夜色| 无码av天堂一区二区三区 | 亚洲国产欧美日韩在线 | 欧美成综合 | 久久久久区 | 日本精品影院 | 精品在线视频一区二区 | 欧美在线aa | 婷婷视频在线 | xxxx毛片 | 日韩久久精品 | 99爱视频在线观看 |