在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

電子發燒友App

硬聲App

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示
電子發燒友網>電子資料下載>電子資料>在連接到STM32的LCD屏幕上顯示BLE傳感器讀數

在連接到STM32的LCD屏幕上顯示BLE傳感器讀數

2023-06-14 | zip | 0.00 MB | 次下載 | 3積分

資料介紹

描述

藍牙 LE 項目的目的是讀取空氣質量傳感器數據并將其顯示在連接到 STM32 板的 LCD 顯示器上。Web 瀏覽器將讀取傳感器數據并使用 BleuIO 將其傳遞給 STM32 板。

一、簡介

該項目基于STM32 Nucleo-144 ,它使用 BleuIO控制LCD 顯示。

對于這個項目,我們需要兩個 BleuIO USB 加密狗,一個連接到 Nucleo 板,另一個連接到運行 Web 腳本的計算機和HibouAir – 空氣質量監測設備當 BleuIO Dongle 連接到 Nucleo 板的 USB 端口時,STM32 將識別它并直接開始廣播。這允許計算機端口上的加密狗與網絡腳本連接。

通過電腦上的網頁腳本,我們可以從 HibouAir 掃描并獲取空氣質量傳感器數據。然后我們將這些數據發送到使用藍牙連接到 STM32 的 LCD 屏幕上。

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

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

關于守則

項目源代碼可在 Github 上獲得。

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

克隆項目,或將其下載為 zip 文件并解壓縮到您的 STM32CubeIDE 工作區。

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

poYBAGNYujGAHG3iAAA5lM86hos585.jpg
?

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

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

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

在 USB_HOST\usb_host.c 中的 USBH_CDC_ReceiveCallback 函數中,我們將 CDC_RX_Buffer 復制到一個名為 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 中,我們創建了一個簡單的解釋器,這樣我們就可以對從加密狗收到的數據做出反應。

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);
}

我們將解釋器函數放在主循環中。

/* 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 */

使用示例項目

我們需要什么

作為現有項目導入

從 STM32CubeIDE 中選擇 File>Import…

pYYBAGNVlzGAOrdTAABTMPtN_vY766.png
?

然后選擇 General>Existing Projects into Workspace 然后點擊“Next >”

poYBAGNVlzOAbEAcAACCYdjUQ8w416.png
?

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

您應該會看到項目“stm32_bleuio_SHT85_example”,選中它并單擊“完成”。

pYYBAGNVlzWAF9eHAACaAb8Lb0g612.png
?

運行示例

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

從網絡瀏覽器將傳感器數據發送到 LCD 屏幕

將 BleuIO 加密狗連接到計算機。運行 Web 腳本以連接到 STM32 上的另一個 BleuIO 加密狗。現在您可以將傳感器數據發送到 LCD 屏幕。

為了讓這個腳本工作,我們需要

創建一個名為 index.html 的簡單 Html 文件,該文件將用作腳本的前端。這個 Html 文件包含一些幫助連接的按鈕,從 HibouAir 讀取廣告數據以獲取空氣質量傳感器數據,并將此數據發送到連接到 stm32 的 LCD 屏幕。

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>Bluetooth LE Air quality sensor data to LCD screentitle>
  head>
  <body class="mt-5">
    <div class="container mt-5">
      <img
        src="https://www.bleuio.com/blog/wp-content/themes/bleuio/images/logo.png"
      />
      <h1 class="mb-5">Bluetooth LE Air quality sensor data to LCD screenh1>

      <div class="row">
        <div class="col-md-4 pt-5">
          <button class="btn btn-success mb-2" id="connect">Connectbutton>
          <form method="post" id="sendDataForm" name="sendMsgForm" hidden>
            <div class="mb-3">
              <label for="sensorID" class="form-label">Sensor IDlabel>
              <input
                type="text"
                class="form-control"
                name="sensorID"
                id="sensorID"
                required
                maxlength="60"
                value="0578E0"
              />
            div>

            <button type="submit" class="btn btn-primary">Get Databutton>
          form>
          <br />
          <button class="btn btn-danger" id="clearScreen" disabled>
            Clear screen
          button>
        div>
        <div class="col-md-8">
          <img src="air_quality_lcd.jpg" class="img-fluid" />
        div>
      div>
    div>

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

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

該腳本有一個按鈕可以連接到計算機上的 COM 端口。有一個文本字段,您可以在其中寫入空氣質量監測設備的傳感器 ID。連接后,腳本將嘗試從傳感器獲取廣告數據并將其轉換為有意義的數據。之后,它將這些數據發送到 STM32 板,然后顯示在 LCD 屏幕上。

import * as my_dongle from 'bleuio'
import 'regenerator-runtime/runtime'

const dongleToConnect = '[0]40:48:FD:E5:2F:17'
//const sensorID = '0578E0'
document.getElementById('connect').addEventListener('click', function() {
	my_dongle.at_connect()
	document.getElementById("clearScreen").disabled = false;
	document.getElementById("connect").disabled = true;
	document.getElementById("sendDataForm").hidden = false;
})

document.getElementById("sendDataForm").addEventListener("submit", function(event) {
	event.preventDefault()
	const sensorID = document.getElementById('sensorID').value
	getSensorData(sensorID)
	setInterval(function() {
		getSensorData(sensorID)
	}, 10000);


});

const getSensorData = ((sensorID) => {
	my_dongle.ati().then((data) => {
			//make central if not
			if (JSON.stringify(data).includes("Peripheral")) {
				console.log('peripheral')
				my_dongle.at_dual().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(async () => {
					return my_dongle.at_findscandata(sensorID, 6).then((sd) => {
						console.log('scandata', sd)
						let advData = sd[sd.length - 1].split(" ").pop()
						let positionOfID = advData.indexOf(sensorID);
						let tempHex = advData.substring(positionOfID + 14, positionOfID + 18)
						let temp = parseInt('0x' + tempHex.match(/../g).reverse().join('')) / 10;

						let co2Hex = advData.substring(positionOfID + 38, positionOfID + 42)
						let co2 = parseInt('0x' + co2Hex);
						//console.log(temp,co2)
						return {
							'CO2': co2,
							'Temp': temp,
						}
					})
				})
				.then((x) => {
					console.log(x.CO2)
					console.log(x.Temp)
					var theVal = "L=1 SENSOR ID " + sensorID + "    TEMPERATURE " + x.Temp + ' °c    CO2 ' + x.CO2 + ' ppm';
					console.log('Message Send 1 ')
					// 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')
					})
				})

		})
})

要連接到 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 #4
?

運行網頁腳本

您將需要一個網絡捆綁程序。您可以使用parcel.js

安裝 parcel js 后,轉到 web 腳本的根目錄并輸入“parcel index.html” 。這將啟動您的開發環境。

pYYBAGNYukOAZYK9AAA2QUu69rw587.jpg
?

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

您可以輕松連接到加密狗并在 LCD 屏幕上查看空氣質量數據。響應將顯示在瀏覽器控制臺屏幕上。

網絡腳本看起來像這樣

poYBAGNYukWAZVLXAACK0oepQis173.png
?

輸出

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

pYYBAGNYukiAByg3AACVI30HeJk214.png
?

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

評論

查看更多

下載排行

本周

  1. 1九陽豆漿機高清原理圖
  2. 2.47 MB   |  12次下載  |  1 積分
  3. 2數能NU501系列恒流芯片型號選型表
  4. 0.04 MB   |  2次下載  |  免費
  5. 3AIWA J470維修手冊 (可直接打?。?/a>
  6. 3.16 MB   |  2次下載  |  10 積分
  7. 4基于51/32單片機按鍵控制步進電機正反轉,A4988驅動
  8. 2.05 MB   |  2次下載  |  1 積分
  9. 5STM32F10xxx單片機編程手冊
  10. 0.29 MB   |  2次下載  |  免費
  11. 6HR1124S/9110S單通道低壓H橋電機驅動芯片中文手冊
  12. 1.30 MB   |  1次下載  |  免費
  13. 7MOSFET講解-02(可下載)
  14. 263.46 KB  |  1次下載  |  免費
  15. 8MOSFET講解-03(可下載)
  16. 501.18 KB  |  1次下載  |  免費

本月

  1. 1晶體三極管的電流放大作用詳細說明
  2. 0.77 MB   |  30次下載  |  2 積分
  3. 2雙極型三極管放大電路的三種基本組態的學習課件免費下載
  4. 4.03 MB   |  23次下載  |  1 積分
  5. 3第十一屆 藍橋杯 單片機設計與開發項目 省賽 程序設計試題及源碼
  6. 90.88KB   |  23次下載  |  3 積分
  7. 4Python從入門到精通背記手冊
  8. 18.77 MB   |  22次下載  |  1 積分
  9. 5多級放大電路的學習課件免費下載
  10. 1.81 MB   |  20次下載  |  2 積分
  11. 6STM32F103C8T6開發板最小系統原理圖
  12. 0.78 MB   |  20次下載  |  免費
  13. 7九陽豆漿機高清原理圖
  14. 2.47 MB   |  12次下載  |  1 積分
  15. 81875功放原理圖
  16. 0.04 MB   |  11次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935127次下載  |  10 積分
  3. 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
  4. 1.48MB  |  420063次下載  |  10 積分
  5. 3Altium DXP2002下載入口
  6. 未知  |  233089次下載  |  10 積分
  7. 4電路仿真軟件multisim 10.0免費下載
  8. 340992  |  191382次下載  |  10 積分
  9. 5十天學會AVR單片機與C語言視頻教程 下載
  10. 158M  |  183337次下載  |  10 積分
  11. 6labview8.5下載
  12. 未知  |  81585次下載  |  10 積分
  13. 7Keil工具MDK-Arm免費下載
  14. 0.02 MB  |  73814次下載  |  10 積分
  15. 8LabVIEW 8.6下載
  16. 未知  |  65988次下載  |  10 積分
主站蜘蛛池模板: 天天干狠狠操 | 欧美三级一区二区 | 国产叼嘿视频免费网站 | 手机福利片 | 久久手机免费视频 | 性视频亚洲| 夜夜摸夜夜操 | 亚洲小younv另类 | 美女视频永久黄网站免费观看国产 | 欧美精品色精品一区二区三区 | 午夜视频在线免费看 | 美女扒开内裤无遮挡禁18 | 狠狠干奇米 | 伊人久久大 | 成人看的午夜免费毛片 | 夜夜澡人人爽人人喊_欧美 夜夜综合网 | 曰本女人色黄网站 | 午夜精品久久久久久99热 | 欧美综合成人网 | 手机在线你懂得 | 午夜欧美福利视频 | a级毛片毛片免费很很综合 a级男女性高爱潮高清试 | 天天舔天天射天天干 | 国产精品久久精品牛牛影视 | 亚洲狠狠色丁香婷婷综合 | 人人精品 | 亚洲аv电影天堂网 | 一级特色黄大片 | 噜噜噜动态图超猛烈 | 狠狠婷婷 | 天天爽夜夜爽 | 扒开双腿爽爽爽视频www | 免费观看在线aa | 天天干天天碰 | 日韩午夜在线视频不卡片 | 免费网址视频在线看 | 西西人体44renti大胆亚洲 | 天天上天天操 | 四虎东方va私人影库在线观看 | 欧美三级在线观看视频 | 久久国产精品网 |