電子發(fā)燒友App

硬聲App

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

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

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>通過藍(lán)牙將消息發(fā)送到連接到STM32板的LCD顯示器

通過藍(lán)牙將消息發(fā)送到連接到STM32板的LCD顯示器

2023-06-14 | zip | 0.00 MB | 次下載 | 免費(fèi)

資料介紹

描述

該項(xiàng)目的目的是使用網(wǎng)絡(luò)瀏覽器或智能手機(jī)通過藍(lán)牙將消息發(fā)送到連接到 STM32 板的 LCD 顯示器。

一、簡介

低功耗藍(lán)牙項(xiàng)目基于STM32 Nucleo-144 ,它使用 BleuIO控制LCD 顯示。

對于這個(gè)項(xiàng)目,我們需要兩個(gè) BleuIO USB 加密狗,一個(gè)連接到 Nucleo 板,另一個(gè)連接到計(jì)算機(jī),運(yùn)行 Web 腳本。當(dāng) BleuIO Dongle 連接到 Nucleo 板的 USB 端口時(shí),STM32 將識別它并直接開始廣播。這允許計(jì)算機(jī)端口上的加密狗與網(wǎng)絡(luò)腳本連接。

使用電腦上的網(wǎng)頁腳本,我們可以使用 BleuIO 向連接到 STM32 的 LCD 屏幕發(fā)送消息。

在本示例中,我們使用了 STM32 Nucleo-144 開發(fā)板和 STM32H743ZI MCU(支持 STM32H743ZI micro mbed 的開發(fā) Nucleo-144 系列 ARM? Cortex?-M7 MCU 32 位嵌入式評估板)。該開發(fā)板有一個(gè) USB 主機(jī),用于連接 BleuIO 加密狗。

如果要使用其他設(shè)置,則必須確保它支持 USB 主機(jī),并注意 GPIO 設(shè)置可能不同,可能需要在 .ioc 文件中重新配置。

關(guān)于守則

項(xiàng)目源代碼可在 Github 上獲得。

https://github.com/smart-sensor-devices-ab/stm32_bleuio_lcd.git

克隆項(xiàng)目,或?qū)⑵湎螺d為 zip 文件并解壓縮到您的 STM32CubeIDE 工作區(qū)。

如果您將項(xiàng)目下載為 zip 文件,則需要將項(xiàng)目文件夾從“stm32_bleuio_lcd-master”重命名為“stm32_bleuio_lcd”

poYBAGNYujGAHG3iAAA5lM86hos585.jpg
?

SDA 連接到 Nucleo 板上的 PF0,將 SCL 連接到 PF1。

然后在 STM32Cube ioc 文件中設(shè)置 I2C2,如下所示。(確保根據(jù) LCD 顯示要求將 I2C 速度頻率更改為 50 KHz。)

pYYBAGNYujSAJEhUAAAMP9SP5yI872.png
?
poYBAGNYujaAHKGmAAA1m3qD8Eg155.png
?
pYYBAGNYujiAC5AqAADEqDRQv9k945.jpg
?

在 USB_HOST\usb_host.c 中的 USBH_CDC_ReceiveCallback 函數(shù)中,我們將 CDC_RX_Buffer 復(fù)制到一個(gè)名為 dongle_response 的外部變量中,該變量可從 main.c 文件訪問。

void USBH_CDC_ReceiveCallback(USBH_HandleTypeDef * phost) {
  if (phost == & hUsbHostFS) {
    // Handles the data recived from the USB CDC host, here just printing it out to UART
    rx_size = USBH_CDC_GetLastReceivedDataSize(phost);
    HAL_UART_Transmit( & huart3, CDC_RX_Buffer, rx_size, HAL_MAX_DELAY);

    // Copy buffer to external dongle_response buffer
    strcpy((char * ) dongle_response, (char * ) CDC_RX_Buffer);

    // Reset buffer and restart the callback function to receive more data
    memset(CDC_RX_Buffer, 0, RX_BUFF_SIZE);
    USBH_CDC_Receive(phost, CDC_RX_Buffer, RX_BUFF_SIZE);
  }

  return;
}

在 main.c 中,我們創(chuàng)建了一個(gè)簡單的解釋器,這樣我們就可以對從加密狗收到的數(shù)據(jù)做出反應(yīng)。

void dongle_interpreter(uint8_t * input) {

  if (strlen((char * ) input) != 0) {
    if (strstr((char * ) input, "\r\nADVERTISING...") != NULL) {
      isAdvertising = true;
    }
    if (strstr((char * ) input, "\r\nADVERTISING STOPPED") != NULL) {
      isAdvertising = false;
    }
    if (strstr((char * ) input, "\r\nCONNECTED") != NULL) {
      isConnected = true;
      HAL_GPIO_WritePin(GPIOE, GPIO_PIN_1, GPIO_PIN_SET);
    }
    if (strstr((char * ) input, "\r\nDISCONNECTED") != 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);
      lcd_clear();

      writeToDongle((uint8_t * ) DONGLE_SEND_LIGHT_OFF);

      uart_buf_len = sprintf(uart_tx_buf, "\r\nClear screen\r\n");
      HAL_UART_Transmit( & huart3, (uint8_t * ) uart_tx_buf, uart_buf_len, HAL_MAX_DELAY);
    }

    if (strstr((char * ) input, "L=1") != NULL) {
      isLightBulbOn = true;
      writeToDongle((uint8_t * ) DONGLE_SEND_LIGHT_ON);

      lcd_clear();

      lcd_write(input);

    }

  }
  memset( & dongle_response, 0, RSP_SIZE);
}

我們將解釋器函數(shù)放在主循環(huán)中。

/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1) {
  /* USER CODE END WHILE */
  MX_USB_HOST_Process();

  /* USER CODE BEGIN 3 */
  // Simple handler for uart input
  handleUartInput(uartStatus);

  // Inteprets the dongle data
  dongle_interpreter(dongle_response);

  // Starts advertising as soon as the Dongle is ready.
  if (!isAdvertising && !isConnected && isBleuIOReady) {
    HAL_Delay(200);
    writeToDongle((uint8_t * ) DONGLE_CMD_AT_ADVSTART);
    isAdvertising = true;
  }
}
/* USER CODE END 3 */

使用示例項(xiàng)目

我們需要什么

pYYBAGNY5t-AS6FEAAAllT3mifY185.jpg
?

作為現(xiàn)有項(xiàng)目導(dǎo)入

從 STM32CubeIDE 中選擇 File>Import…

pYYBAGNVlzGAOrdTAABTMPtN_vY766.png
?

然后選擇 General>Existing Projects into Workspace 然后點(diǎn)擊“Next >”

poYBAGNVlzOAbEAcAACCYdjUQ8w416.png
?

確保您在“選擇根目錄:”中選擇了您的工作區(qū)

您應(yīng)該會看到項(xiàng)目“stm32_bleuio_SHT85_example”,選中它并單擊“完成”。

pYYBAGNVlzWAF9eHAACaAb8Lb0g612.png
?

運(yùn)行示例

將代碼上傳到 STM32 并運(yùn)行示例。連接到 STM32 的 USB 加密狗將自動開始廣播。

從網(wǎng)絡(luò)瀏覽器向 LCD 屏幕發(fā)送消息

將 BleuIO 加密狗連接到計(jì)算機(jī)。運(yùn)行 Web 腳本以連接到 STM32 上的另一個(gè) BleuIO 加密狗。現(xiàn)在您可以將消息發(fā)送到 LCD 屏幕。

為了讓這個(gè)腳本工作,我們需要

  • BleuIO USB 加密狗連接到計(jì)算機(jī)。
  • BleuIO JavaScript 庫
  • Chrome 78 或更高版本,您需要在 chrome://flags 中啟用#enable-experimental-web-platform-features標(biāo)志
  • 一個(gè)網(wǎng)絡(luò)捆綁器——(包裹 js)

創(chuàng)建一個(gè)名為 index.html 的簡單 Html 文件,該文件將用作腳本的前端。此 Html 文件包含一些按鈕,可幫助連接和讀取來自遠(yuǎn)程加密狗的廣告數(shù)據(jù),該加密狗連接到 stm32。

html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="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="stylesheet"
      integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3"
      crossorigin="anonymous"
    />
    <title>Send message to STM32 LCD display using Bluetooth LEtitle>
  head>
  <body class="mt-5">
    <div class="container mt-5">
      <h1 class="mb-5">Send message to STM32 LCD display using Bluetooth LEh1>
      <button class="btn btn-success" id="connect">Connectbutton>
      <div class="row">
        <div class="col-md-4">
          <form method="post" id="sendMsgForm" name="sendMsgForm">
            <div class="mb-3">
              <label for="msgToSend" class="form-label">Your Messagelabel>
              <input
                type="text"
                class="form-control"
                name="msgToSend"
                id="msgToSend"
                required
                maxlength="60"
              />
            div>

            <button type="submit" class="btn btn-primary">Submitbutton>
          form>
        div>
      div>

      <br />
      <button class="btn btn-danger" id="clearScreen" disabled>
        Clear screen
      button>
    div>

    <script src="script.js">script>
  body>
html>

創(chuàng)建一個(gè)名為 script.js 的 js 文件并將其包含在 Html 文件的底部。這個(gè) js 文件使用 BleuIO js 庫來編寫 AT 命令并與其他加密狗進(jìn)行通信。

import * as my_dongle from 'bleuio'
const dongleToConnect = '[0]40:48:FD:E5:2F:17'
document.getElementById('connect').addEventListener('click', function() {
	my_dongle.at_connect()
	document.getElementById("clearScreen").disabled = false;
	document.getElementById("connect").disabled = true;
	document.getElementById("sendMsgForm").hidden = false;
})

document.getElementById("sendMsgForm").addEventListener("submit", function(event) {
	event.preventDefault()
	console.log('here')


	my_dongle.ati().then((data) => {
			//make central if not
			if (JSON.stringify(data).includes("Peripheral")) {
				console.log('peripheral')
				my_dongle.at_central().then((x) => {
					console.log('central now')
				})
			}
		})
		.then(() => {
			// connect to dongle
			my_dongle.at_getconn().then((y) => {
					if (JSON.stringify(y).includes(dongleToConnect)) {
						console.log('already connected')
					} else {
						my_dongle.at_gapconnect(dongleToConnect).then(() => {
							console.log('connected successfully')
						})
					}
				})
				.then(() => {
					var theVal = "L=1 " + document.getElementById('msgToSend').value;
					console.log('Message Send 1 ' + theVal)
					// send command to show data
					my_dongle.at_spssend(theVal).then(() => {
						console.log('Message Send ' + theVal)
					})
				})

		})
});



document.getElementById('clearScreen').addEventListener('click', function() {
	my_dongle.ati().then((data) => {
			//make central if not
			if (JSON.stringify(data).includes("Peripheral")) {
				console.log('peripheral')
				my_dongle.at_central().then((x) => {
					console.log('central now')
				})
			}
		})
		.then(() => {
			// connect to dongle
			my_dongle.at_getconn().then((y) => {
					if (JSON.stringify(y).includes(dongleToConnect)) {
						console.log('already connected')
					} else {
						my_dongle.at_gapconnect(dongleToConnect).then(() => {
							console.log('connected successfully')
						})
					}
				})
				.then(() => {
					// send command to clear the screen
					my_dongle.at_spssend('L=0').then(() => {
						console.log('Screen Cleared')
					})
				})

		})
})

?

該腳本有一個(gè)按鈕可以連接到計(jì)算機(jī)上的 COM 端口。有一個(gè)文本字段,您可以在其中編寫消息。您的消息將顯示在連接到 STM32 開發(fā)板的 LCD 屏幕上。

要連接到 STM32 上的 BleuIO 加密狗,請確保 STM32 已通電并連接了 BleuIO 加密狗。

獲取 MAC 地址

按照步驟獲取連接到STM32的加密狗的MAC地址

- Open this site https://bleuio.com/web_terminal.html and click connect to dongle.
- Select the appropriate port to connect.
- Once it says connected, type ATI. This will show dongle information and current status.
- If the dongle is on peripheral role, set it to central by typing AT+CENTRAL
- Now do a gap scan by typing AT+GAPSCAN
- Once you see your dongle on the list ,stop the scan by pressing control+c
- Copy the ID and paste it into the script (script.js) line #2
?

運(yùn)行網(wǎng)頁腳本

您將需要一個(gè)網(wǎng)絡(luò)捆綁程序。您可以使用parcel.js

安裝 parcel js 后,轉(zhuǎn)到 web 腳本的根目錄并輸入“parcel index.html” 這將啟動您的開發(fā)環(huán)境。

pYYBAGNYukOAZYK9AAA2QUu69rw587.jpg
?

在瀏覽器上打開腳本。對于這個(gè)例子,我們打開http://localhost:1234

您可以輕松連接到加密狗并將消息發(fā)送到 LCD 屏幕。響應(yīng)將顯示在瀏覽器控制臺屏幕上。

網(wǎng)絡(luò)腳本看起來像這樣

pYYBAGNY5vGAYD7QAACS7TLDVGQ340.png
?

輸出

信息將顯示在液晶顯示屏上。

poYBAGNY5vSAMW6dAAEGetjLGUA950.png
?

?


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
  2. 1.06 MB  |  532次下載  |  免費(fèi)
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費(fèi)
  5. 3TC358743XBG評估板參考手冊
  6. 1.36 MB  |  330次下載  |  免費(fèi)
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費(fèi)
  9. 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費(fèi)
  11. 6迪文DGUS開發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費(fèi)
  13. 7元宇宙底層硬件系列報(bào)告
  14. 13.42 MB  |  182次下載  |  免費(fèi)
  15. 8FP5207XR-G1中文應(yīng)用手冊
  16. 1.09 MB  |  178次下載  |  免費(fèi)

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費(fèi)
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費(fèi)
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費(fèi)
  7. 4開關(guān)電源設(shè)計(jì)實(shí)例指南
  8. 未知  |  21549次下載  |  免費(fèi)
  9. 5電氣工程師手冊免費(fèi)下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費(fèi)
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費(fèi)
  13. 7電子制作實(shí)例集錦 下載
  14. 未知  |  8113次下載  |  免費(fèi)
  15. 8《LED驅(qū)動電路設(shè)計(jì)》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費(fèi)
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費(fèi)
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費(fèi)
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費(fèi)
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費(fèi)
  11. 6電路仿真軟件multisim 10.0免費(fèi)下載
  12. 340992  |  191187次下載  |  免費(fèi)
  13. 7十天學(xué)會AVR單片機(jī)與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費(fèi)
  15. 8proe5.0野火版下載(中文版免費(fèi)下載)
  16. 未知  |  138040次下載  |  免費(fèi)