閑來無事,用手頭STM32做個項目。
成品功能: STM32通過GPS模塊采集位置數據,通過超聲波監測距離,看前方是否有障礙物,有的話蜂鳴器提醒。數據顯示在屏幕上,通過NB-IOT(BC26)模塊連接阿里云物聯網平臺接受數據并實時監控。
材料
STM32ZET6開發板(戰艦V3)
TFT顯示屏(戰艦有我用的2.7寸的)
NB-IOT(BC26)模塊
GPS模塊(ATK-NEO-6M GPS 模塊)
超聲波模塊(HCSR04)
杜邦線
用keil5進行開發
開始制作。
制作過程
首先測試GPS模塊,將例程下入板中測試。然后測試BC26模塊,通過AT指令接入阿里云,成功連接后再通過STM32接入阿里云實現通信。最后加入超聲波模塊。進行組合測試。https://blog.csdn.net/weixin_42320020/article/details/115556492
GPS模塊
GPS(ATK-NEO-6M GPS)模塊
設置好后,模塊接收NMEA碼并解析出我們需要的數據。
例如:

在這里插入圖片描述
每個都代表著不同的數據。可以參考:GPS的NMEA碼的詳細解釋定義
具體的模塊已經配置好了,我們使用就可以了。
硬件連接
將模塊插入到開發板的ATK-MODULE接口(靠下插)即可。

在這里插入圖片描述
短接: USART3_RX 和 GBC_TX 以及 USART3_TX 和 GBC_RX。
代碼測試
將原子哥的代碼下載到板子中進行測試。
通電測試(我開始在室內,等了好久都沒有數據,后來搬到室外就有數據了,第一次連接需要等一會兒,在室外有數據之后,再回到室內就還有數據。)
這樣即表示成功

在這里插入圖片描述
NB-IOT(BC26)模塊
模塊配置連接阿里云可以參考我上篇文章。基于STM32的NB-IOT(BC26)的溫濕度監測系統
這里需要添加幾個展示。

在這里插入圖片描述
這樣BC26和阿里云對接就搞定了。
哪個作為基礎代碼都可以
將模塊代碼文件加入。
在keil中添加引入這個文件。
在主函數中添加初始化函數。
將位置數據添加到串口中。

在這里插入圖片描述
這里位置數據是個結構體,我們這樣打包串口位置數據。{'GeoLocation':{'E':%.5f,'N':%.5f,'G':%.1f}
進行測試。

在這里插入圖片描述
可以看到已經有數據了。
超聲波模塊
超聲波模塊工作原理:
(1)采用IO口TRIG觸發測距,給最少10us的高電平信號。
(2)模塊自動發送8個40khz的方波,自動檢測是否有信號返回。
(3)有信號返回,通過IO口ECHO輸出一個高電平,高電平持續時間就是超聲波從發射到返回的時間,測試距離=(高電平時間聲速(340M/s)/2(發射和回來的時間,所以要除以2))*
超聲波STM32代碼:
void Ultra_Ranging(float *p){
u8 i;
u32 j;
float Ultr_Temp;
for(i=0;i<5;i++)
{
TRIG_Send=1;
delay_ms(10);
TRIG_Send=0;
while(!ECHO_Reci);
while(ECHO_Reci)
{
delay_us(10);
j++;
}
Ultr_Temp+=340/2*j*10;
j=0;
delay_ms(60);
}
*p=Ultr_Temp/5/1000000; }
將超聲波代碼加入到寫好的代碼中。進行測試。

在這里插入圖片描述
可以看到效果跟預想的一樣。
最后加入當超聲波監測距離小于3米蜂鳴器報警。
這個項目就完成你了。
關鍵字:STM32 智能 導盲系統
引用地址:
基于STM32的智能(GPS+NB-IOT)導盲系統
推薦閱讀最新更新時間:2025-05-23 01:30
畢業設計| STM32單片機控制的智能家居系統設計
? 智能家居系統功能概述 上面視頻演示的STM32智能家居的功能是: ? 通過語音識別和上位機App進行控制 ? 實現有人闖入自動警報 ? 照明控制,溫度和濕度控制,空氣質量測量,家用電器定時和自動窗簾等功能的控制 主控是STM32F103RCT6單片機,連接到每個傳感器。通過LD3320語音芯片生成語音信號到MCU的串口,在串口識別出發送的數據后,可以控制每個傳感器,還通過藍牙HC05將AT命令連接發送到手機App的控制端,進而控制家電。 ? 離線語音識別功能: 該功能的語音識別詞分為兩級: 第一級識別詞:“小白”用來喚醒智能家居系統,此時LD3320的模塊燈常亮。 第二級識別詞用來控制“家居”,如:“開燈”“
[單片機]
關于stm32串口必須要學的5個串口以及串口應用和注意事項
串口是我們常用的一個數據傳輸接口,STM32F103系列單片機共有5個串口。 其中1-3是通用同步/異步串行接口USART(Universal Synchronous/Asynchronous Receiver/Transmitter)。 4,、5是通用異步串行接口UART(Universal Asynchronous Receiver/Transmitter)。 看完文章總結可以看下邊的資料了解詳細情況 (stm32 USART串口應用) http://www.makeru.com.cn/live/1392_1164.html?s=45051 通過Z-stack協議棧實現串口透傳 http://www
[單片機]
關于stm32的USB和SPI疑似存在干擾的問題
情況是這樣的,最近做一個項目,使用的是stm32f103RE單片機,使用到了單片機的usb口和SPI1。USB虛擬成串口向上位機發送數據,已經通過修改官網的例程調試通過,SPI1也能正常工作。但是當把兩個功能做在同一個工程中時,發現出現了一些問題:USB想上位機發送一段時間后會停止發送(我的程序是在while中一直發送);USB發送會出現亂碼。當我把SPI1的讀寫函數注釋掉之后上述問題有消失了。這個問題糾結了我好幾天了,不知道各位高手能不能幫我解答解答。 調試發現程序停在了while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);中,但是之前沒有添加USB功能模塊
[單片機]
STM32時鐘源
PLLK,SYSK,HCKL,PK1,PK2 之間的關系要弄清楚; 1、HSI:高速內部時鐘信號 stm32單片機內帶的時鐘 (8M頻率) 精度較差 2、HSE:高速外部時鐘信號 精度高 來源(1)HSE外部晶體/陶瓷諧振器(晶振) (2)HSE用戶外部時鐘 3、LSE:低速外部晶體 32.768kHz 主要提供一個精確的時鐘源 一般作為RTC時鐘使用 在STM32中,有五個時鐘源,為HSI、HSE、LSI、LSE、PLL。 ①、HSI是高速內部時鐘,RC振蕩器,頻率為8MHz。 ②、HSE是高速外部時鐘,可接石英/陶瓷諧振器,或者接外部時鐘源,頻率范圍為4MHz~16MHz。 ③、LSI是低速內部時鐘,RC振蕩器
[單片機]
STM32定時器輸出PWM 【自用】
PWM1輸出模式配置: 1.配置IO(TIM3 PA6~7 CH1 CH2 GPIO_Mode_AF_PP復用推挽輸出 50Mhz速度) /*void GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; //GPIOA and GPIOB clock enable RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //GPIOA Configuration: TIM3 channel 1 and 2 as alternate function push-pull GPIO_InitStructure.
[單片機]
stm32之S6D04H0 液晶驅動(寄存器版)
1、初始化命令問題:在S6D04H0中,命令是八位,參數也有第一次,第二次,次數之分,與一般的命令是八位或十六位,參數是一次性的十六位不同(如下圖) 2、這些命令形式不同是不是有什么影響 3、是不是還沒有設置關于橫屏豎屏 4、這塊LCD是我從單片機學習板上取過來的,會不會電平有什么問題,結果發現,IO口仍然是3.3v邏輯,然后,兩邊的vcc則需要5v,而且這塊液晶上也集成了5v轉3.3v芯片 而且后來去網上查了,大部分lcd不會出現這種情況 這個在此lcd的驅動芯片手冊中也可查到 5、我嘗試用了網上說兼容的型號HX8347-G的代碼,用了后卻絲毫沒有半點反應 6、由于一直沒搞懂fsmc的寄存器設置,網上關于它的寄存器設置
[單片機]
stm32串口接收數據程序
void init_usart(void) //RCC初始化 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO,,ENABLE);//使能GPIOA時鐘 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE); //nvic NVIC_ InitTypeDef NVIC_InitStructure;#ifdef VECT_TAB_RAM NVIC_SetVectorTable(NVIC_VectTab_RAM,Ox0);#else NVIC_SetVectorTable(NVIC_VectTab_FL
[單片機]
STM32里的串口通信
在STM32里,串口通信是USART,STM32可以通過串口和其他設備進行傳輸并行數據,是全雙工,異步時鐘控制,設備之間是點對點的傳輸。 對應的STM32引腳分別是RX和TX端。STM32的串口資源有USART1、USART2、USART3. 串口的幾個重要的參數: 波特率,串口通信的速率 空閑,一般為高電平 起始位,標志一個數據幀的開始,固定為低電平。當數據開始發送時,產生一個下降沿。(空閑–》起始位) 數據位,發送數據幀,1為高電平,0為低電平。低位先行。 比如 發送數據幀0x0F 在數據幀里就是低位線性 即 1111 0000 校驗位,用于數據驗證,根據數據位的計算得來。有奇校驗,偶校驗和無校驗。 停止位,用于數據的間隔
[單片機]