本文將教您如何使用 STM32 制作啟用 BLE 的智能燈泡。
家庭自動化涉及自動化家庭環境設備。為此,我們開發了一種易于安裝的智能燈泡,并且可以通過網絡瀏覽器或智能手機應用程序控制連接的設備。該項目的目的是使用網絡瀏覽器或智能手機控制不同的家用電器。
一、介紹
該項目展示了一種使用 BleuIO Dongle 打開和關閉通過 5V 繼電器連接到 STM32 Nucleo-144 的燈泡的簡單方法。
您將需要兩個加密狗,一個連接到 Nucleo 板,一個連接到計算機,運行 Web 腳本。
當 BleuIO Dongle 連接到 Nucleo 板的 USB 端口時,STM32 會識別它并直接開始廣告。這允許另一個加密狗連接到它。
它還將接受來自 UART 的 3 個不同輸入:
輸入結果
0 向 BlueIO Dongle 發送 ATI(請求設備信息)命令。
1 手動打開燈泡
2 手動關閉燈泡
我們使用了STM32 Nucleo-144開發板和STM32H743ZI MCU(STM32H743ZI micro mbed-Enabled Development Nucleo-144 series ARM? Cortex?-M7 MCU 32-Bit Embedded Evaluation Board)作為例子。
如果您想使用其他設置,您必須確保它支持 USB 主機,并注意 GPIO 設置可能不同,可能需要在 .ioc 文件中重新配置。
警告 – 該項目涉及可能導致嚴重傷害或死亡的高電壓。在對電路進行操作之前,請采取所有必要的預防措施,并關閉電路的所有電源。
2. 連接繼電器
謹防:
試驗交流電時請務必小心,觸電會導致嚴重傷害!風險通知;免責聲明
引腳排列和連接到STM32 對于繼電器電路的直流部分,將S(信號)連接到STM32 NUCLEO 板上的引腳PE4,同時將電源(+)和地(-)分別連接到+5V 和GND。
3. 關于守則
這個項目基于我們之前的 STM32 項目 (https://github.com/smart-sensor-devices-ab/stm32_bleuio_example),在 .ioc 文件中有這些變化:
在引腳視圖中,我們將 GPIO PE4 設置為 OUTPUT 并將其標記為“燈泡”。
在 USB_HOSTusb_host.c 中的 USBH_CDC_ReceiveCallback 函數中,我們將 CDC_RX_Buffer 復制到一個名為 dongle_response 的外部變量中,該變量可從 main.c 文件訪問。
在 main.c 中,我們創建了一個簡單的解釋器,以便我們可以對從加密狗接收到的數據做出反應。
void dongle_interpreter ( uint8_t * input)
{
if ( strlen (( char *)input) != 0 )
{
if ( strstr (( char *)input, "
廣告..." ) != NULL )
{
isAdvertising = true ;
}
if ( strstr (( char *)input, "
廣告已停止。" ) != NULL )
{
isAdvertising = false ;
}
if ( strstr (( char *)input, "
CONNECTED" ) != NULL )
{
isConnected =真;
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_1, GPIO_PIN_SET);
}
if ( strstr (( char *)input, "
DISCONNECTED" ) != NULL )
{
isConnected = false ;
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_1, GPIO_PIN_RESET);
}
if ( strstr (( char *)input, "L=0" ) != NULL )
{
isLightBulbOn = false ;
HAL_GPIO_WritePin(Lightbulb_GPIO_Port, Lightbulb_Pin, GPIO_PIN_RESET);
writeToDongle(( uint8_t *)DONGLE_SEND_LIGHT_OFF);
uart_buf_len = sprintf (uart_tx_buf, "
燈泡是 %s
" , isLightBulbOn ? "on" : "off" );
HAL_UART_Transmit(&huart3, ( uint8_t *)uart_tx_buf, uart_buf_len, HAL_MAX_DELAY);
}
if ( strstr (( char *)input, "L=1" ) != NULL )
{
isLightBulbOn = true ;
HAL_GPIO_WritePin(Lightbulb_GPIO_Port, Lightbulb_Pin, GPIO_PIN_SET);
writeToDongle(( uint8_t *)DONGLE_SEND_LIGHT_ON);
uart_buf_len = sprintf (uart_tx_buf, "
燈泡是 %s
" , isLightBulbOn ? "on" : "off" );
HAL_UART_Transmit(&huart3, ( uint8_t *)uart_tx_buf, uart_buf_len, HAL_MAX_DELAY);
}
}
memset (&dongle_response, 0 , RSP_SIZE);
}
我們還更新了 handleUartInput 函數,以便我們可以通過 UART 手動控制燈泡。
void handleUartInput (UARTCommandTypeDef cmd)
{
switch (cmd)
{
情況UART_RX_0:
{
// 0
uart_buf_len = sprintf (uart_tx_buf, "
(0 press )
" );
HAL_UART_Transmit(&huart3, ( uint8_t *)uart_tx_buf, uart_buf_len, HAL_MAX_DELAY);
如果(isBleuIOReady)
{
writeToDongle(( uint8_t *)DONGLE_CMD_ATI);
}其他
{
uart_buf_len = sprintf (uart_tx_buf, BLEUIO_NOT_READY_MSG);
HAL_UART_Transmit(&huart3, ( uint8_t *)uart_tx_buf, uart_buf_len, HAL_MAX_DELAY);
}
uartStatus = UART_RX_NONE;
打破;
}
情況UART_RX_1:
{
// 1
uart_buf_len = sprintf (uart_tx_buf, "
(1 個按下的燈泡亮了!)
" );
HAL_UART_Transmit(&huart3, ( uint8_t *)uart_tx_buf, uart_buf_len, HAL_MAX_DELAY);
HAL_GPIO_WritePin(Lightbulb_GPIO_Port, Lightbulb_Pin, GPIO_PIN_SET);
uartStatus = UART_RX_NONE;
打破;
}
情況UART_RX_2:
{
// 2
uart_buf_len = sprintf (uart_tx_buf, "
(2 按下燈泡關閉!)
" );
HAL_UART_Transmit(&huart3, ( uint8_t *)uart_tx_buf, uart_buf_len, HAL_MAX_DELAY);
HAL_GPIO_WritePin(Lightbulb_GPIO_Port, Lightbulb_Pin, GPIO_PIN_RESET);
uartStatus = UART_RX_NONE;
打破;
}
情況UART_RX_NONE:
{
打破;
}
默認:
{
uartStatus = UART_RX_NONE;
打破;
}
}
}
我們將解釋器函數放在主循環中。
4. 使用示例項目
4.1 你需要什么
兩個 BleuIO 加密狗
加密狗的腳本(可在 web 腳本文件夾中的源代碼中找到)
帶有帶 USB 端口的 STM32 微控制器的板。(Nucleo-144 開發板:NUCLEO-H743ZI2,用于開發此示例。
要將加密狗連接到 Nucleo 板,可以使用帶有 USB A 母對母適配器的“USB A 到 Micro USB B”電纜。)
STM32CubeIDE
一個 5V 繼電器
一個燈泡
5. 如何設置項目
5.1 從下方下載項目
克隆項目,或將其下載為 zip 文件并將其解壓縮到您的 STM32CubeIDE 工作區中。
5.2 作為現有項目導入
從 STM32CubeIDE 中選擇 File》Import.。。
然后選擇 General》Existing Projects into Workspace 然后點擊“Next》”
確保您在“選擇根目錄:”中選擇了您的工作區
您應該會看到項目“stm32_bleuio_example”,檢查它并單擊“完成”。
6. 運行示例
在 STMCubeIDE 中,單擊錘子圖標以構建項目。
使用 TeraTerm、Putty 或 CoolTerm 等串行終端仿真程序打開“STMicroelectronics STLink 虛擬 COM 端口”。串行端口設置:
波特率:115200
數據位:8
奇偶校驗:無
停止位:1
流量控制:無
在運行示例之前連接 BleuIO Dongle。
在 STMCubeIDE 中,單擊綠色播放按鈕閃爍并在您的板上運行它。第一次單擊它時,將出現“運行配置”窗口。您可以保持原樣,然后單擊運行。
您應該會收到以下歡迎信息:
等到顯示消息:“[BleuIO Dongle Ready]”。
您現在可以使用腳本連接另一個加密狗。
您還可以使用 uart 命令(0、1 或 2):
按 0 獲取設備信息。
1 打開燈泡。
2 關閉燈泡。
加密狗響應將打印到 UART。
7. 從網絡瀏覽器控制燈光
我們編寫了一個簡單的腳本,該腳本連接到加密狗并發送信號以從 Web 瀏覽器切換燈光。
為了讓這個腳本工作,我們需要
連接到計算機的 BleuIO USB 加密狗。
BleuIO javascript 庫
Chrome 78 或更高版本,并且您需要在 chrome://flags 中啟用 #enable-experimental-web-platform-features 標志
一個網絡打包器——(parcel js)
創建一個名為 index.html 的簡單 Html 文件,它將用作腳本的前端。此 Html 文件包含一些按鈕,可幫助連接到遠程加密狗并向其發送信號,該加密狗已連接到 stm32。
< html lang = "en" >
< head >
< meta charset = "UTF-8" />
< meta http-equiv = "X-UA-Compatible" content = "IE=edge" />
<元 名稱= "viewport" content = "width=device-width, initial-scale=1.0" />
< link
href = "https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/ bootstrap.min.css”
rel = "樣式表"
完整性= “sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3”
crossorigin = “匿名”
/>
<標題>控制輕使用Bleutooth低能
<體 類= “MT-5” >
< DIV 類= “容器MT-5” >
< h1 class = "mb-5" >使用低功耗藍牙控制燈光
<按鈕 類="btn btn-success" id = "connect" >連接
< button class = "btn btn-warning" id = "lightOn" disabled >打開
< button class = "btn btn-danger" id = "lightOf" disabled > Turn Off
< div class = "container mt-5">
<圖片 ID= "light" src = "light_off.png" alt = "" />
< script src = "script.js" >
創建一個名為 script.js 的 js 文件并將其包含在 Html 文件的底部。該js文件使用BleuIO js庫來編寫AT命令并與其他加密狗通信。
import * as my_dongle from "bleuio" ;
const dongleToConnect = "[0]40:48:FD:E5:35:A5" ;
從"./light_on.png"導入lightOnImg ;
從"./light_off.png"導入lightOfImg ;
文檔.getElementById( "connect" ).addEventListener( "click" , function () {
my_dongle.at_connect();
文檔.getElementById( "lightOn" ).disabled = false ;
文檔.getElementById( "lightOf" ).disabled = false ;
文檔.getElementById( "connect" ).disabled = true ;
});
文檔.getElementById( "lightOn" ) .addEventListener ( "click" , function () {
my_dongle
.ati ()
. 然后((數據) => {
//米AKE中央如果 不
如果(JSON.stringify(數據).includes( “外設”)){
控制臺的.log( “周邊”);
my_dongle.at_central()。then ( (x) => {
console .log( "central now" );
});
}
})
. then ( () => {
//連接到加密狗
my_dongle
.at_getconn()
. then ( (y) => {
if (JSON.stringify(y).includes(dongleToConnect)) {
console .log( "already connected" );
}其他{
my_dongle.at_gapconnect(dongleToConnect)。then ( () => {
console .log( "連接成功" );
});
}
})
. then ( () => {
//發送命令控制燈光
my_dongle.at_spssend( "L=1" )。then ( () => {
console .log( "Turned on" );
document .getElementById( "light" ).src = lightOnImg;
});
});
});
});
文檔.getElementById( "lightOf" ) .addEventListener ( "click" , function () {
my_dongle
.ati ()
. 然后((數據) => {
//米AKE中央如果 不
如果(JSON.stringify(數據).includes( “外設”)){
控制臺的.log( “周邊”);
my_dongle.at_central()。then ( (x) => {
console .log( "central now" );
});
}
})
. then ( () => {
//連接到加密狗
my_dongle
.at_getconn()
. then ( (y) => {
if (JSON.stringify(y).includes(dongleToConnect)) {
console .log( "already connected" );
}其他{
my_dongle.at_gapconnect(dongleToConnect)。then ( () => {
console .log( "連接成功" );
});
}
})
. then ( () => {
//發送命令控制燈光
my_dongle.at_spssend( "L=0" )。then ( () => {
console .log( "Turned off" );
document .getElementById( "light" ).src = lightOfImg;
});
});
});
});
腳本js文件有三個按鈕動作;連接和控制燈。
現在我們需要知道另一個連接到STM32的加密狗的ID,以便我們可以連接到它。您可以使用此 Web 終端獲取加密狗 ID。
- 打開此站點 https://bleuio.com/web_terminal.html 并單擊連接到加密狗。
- 選擇合適的端口進行連接。
- 一旦它說已連接,輸入**“ATI”**。這將顯示加密狗信息和當前狀態。
- 如果加密狗處于外圍角色,請通過鍵入 **”AT+CENTRAL“** 將其設置為中央
- 現在通過鍵入 **”AT+GAPSCAN“** 進行間隙掃描
- 在列表中看到您的加密狗后,按 control+c 停止掃描
- 復制 ID 并將其粘貼到腳本 (script.js) 第 2 行中
您將需要一個網絡捆綁器。你可以使用parcel.js
安裝parcel js后,轉到根目錄并輸入“parcel index.html”。這將啟動您的開發環境。
使用parcel js 在瀏覽器上打開腳本。
您可以輕松連接到加密狗并從那里打開關閉燈。
這里還沒有內容,您有什么問題嗎?
電子電路資源推薦
- 印制電路設計標準手冊 238頁 3.9M PDF版.pdf
來源:下載中心
- 運算放大器電路(內山明治 著)
來源:下載中心
- 是德兩分鐘導師系列課程第一季
來源:大學堂
- 電阻和電阻定律以及0歐電阻和上、下拉電阻的作用
來源:電路圖
- 數字電子技術基礎
來源:大學堂
- PCB板基礎知識講解
來源:電路圖
推薦帖子 最新更新時間:2025-06-16 13:37
- 為什么語音IC接上功放電路后就沒有聲音了呢
- 求大神們看看是電路哪里出了問題,喇叭直接接語音IC是可以播放聲音的,但是接了功放后就沒有聲音了,。功放的1腳給的是高 為什么語音IC接上功放電路后就沒有聲音了呢 估計是接插件發生短路、焊接出現短路、功放電路中元件損壞 既然 喇叭直接接語音IC是可以播放聲音的 ,那么你的語
吃星星的狼
模擬電子
- 【RT-Thread軟件包應用作品】+開箱和開發環境建立
- 開箱和環境建立 開箱 打開紙箱,看到一個塑料小盒子,里面裝置本次使用的開發板,一條usb數據線,一個遙控器和兩條杜邦想。 正面細節圖 背面細節圖 連上USB數據線,開關達到 ON ,首次上電運行: 后面還有一頁是二
我愛下載
實時操作系統RTOS
- 國內有好的EDA設計工具廠商嗎
- 我知道EDA大巨頭都是國外的,國內有好的EDA設計工具廠商嗎? 國內有好的EDA設計工具廠商嗎 前兩天看到了一片列舉國內做EDA軟件的,有哪些忘了 我知道的有華大九天,做的EDA是IC設計上的某些工具。。 知道有一個 和某個PCB打樣商城平臺綁定一起 真正從底層做
kernelkoder
PCB設計
- 【國賽專訪】“三只弱雞”抱回H題一等獎,憑運氣獲獎的來啦?。?/a>
- 你遇到的獲得國賽一等獎是不是一般都是這樣的: 從小拆裝收音機、電視機的發燒友,電子工程師二代、精通模電、數電的超級學霸 那你有沒有遇到這樣的: 入學前電子基礎幾乎為零,參賽時還是大一學生、直到現在模電知識還很欠缺 卻獲得了H題 模擬電磁曲射炮的國家一等獎,
nmg
電子競賽
- 【零知ESP8266教程】快速入門25 blynk控制RGB LED
- 本文講解繼續使用blynk app+服務器(本地) + 零知ESP8266硬件的方法,通過手機APP控制RGB led三色燈。 一、硬件 1.電腦,windows系統 2.零知ESP8266開發板 3.智能手機一部 + app(Blynk) 4.micro-usb線 5.RGB
roc2
stm32/stm8
- Qorvo收購Active-Semi背后你不知道的二三事!
- Qorvo為什么收購Active-Semi? 這首先從Active-Semi所關注的市場的發展前景看出點端倪。如下圖所示,電源管理在Qorvo所專注的IDP(包括5G基站、國防有源相控陣、汽車和物聯網)市場的營收貢獻將會越來越多。 這也是Active-Sem
alan000345
無線連接
- CML電平擺幅
- PIC32MX250F128B請教?
- 想請教大家如何選擇光耦
- DSP的軟件等待的如何使用?
- 求教MAX1898用什么仿真?
- 如何選擇DSP的外部存儲器?
- 關于TLV5616的12位DAC問題
- 基于查表法弱磁的電動汽車永磁同步電機dq電流查詢表自動生成開源程序
- 測量磁阻問題
- 《Linux操作系統-Exynos4412》如何使用BusyBox制作最小文件系統
- 求組無線接收組別和頻道的知識,關于什么433
- 為什么FIQ模式沒有得到廣泛應用
- LLAKG:Arduino 自動澆花系統(第1集:系統構想與功能簡介)
- 吉時利源表-一臺比擬五臺測試儀器
- 概述FPGA燒寫JIC文件到底是個怎樣的過程
- 學習TMS320F28335了解一下 DMA配置詳解
- 基于TMS320DM642的網絡攝像機設計
- SHT31測評+開箱
- 開關電源輸入濾波電路怎么設計?
- TI C2000 Piccolo單芯片——實現雙軸伺服電機和馬達控制
- 使用 Analog Devices 的 LTC2908ITS8-C1 的參考設計
- OP497FSZ-REEL平方放大器典型應用電路
- LTC2439CGN-1 演示板,8 通道差分 16 位 ADC
- DC1532A-E,LTC2264-14 演示板,14 位,40 Msps,1.8V 雙串行 ADC,5 MHz
- LT1173CS8 高功率、低靜態電流降壓轉換器的典型應用電路
- AM1G-0503DZ ±3.3V 1 瓦 DC/DC 轉換器的典型應用
- 我市大蔥明-QC誘騙模塊-單片機版
- 深圳地鐵卡NFC
- MCF5272 MPU CAN 控制器參考設計
- 使用 Richtek Technology Corporation 的 RT8567A 的參考設計