国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

STM32+ESP8266+QT客戶端上位機(jī)顯示DHT11溫濕度與點(diǎn)燈

這篇具有很好參考價(jià)值的文章主要介紹了STM32+ESP8266+QT客戶端上位機(jī)顯示DHT11溫濕度與點(diǎn)燈。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

1、簡(jiǎn)介

2、硬件連接

3、上位機(jī)源碼

3.1?widget.h

3.2?widget.c?

3.3?顯示圖

?4、下位機(jī)源碼

4.1 cubemax配置

?4.2 keil源碼


1、簡(jiǎn)介

本文使用STM32F103C8T6單片機(jī)使用單片機(jī)通過ESP8266WIFI模塊與QT設(shè)計(jì)的上位機(jī)進(jìn)行通訊,ESP8266設(shè)置AP模式。實(shí)現(xiàn)DHT11傳感器溫濕度的顯示與遠(yuǎn)程控制LED小燈的亮滅。

2、硬件連接

PB9---DHT11(5V)

PA9----RX

PA10---TX

ESP8266(3.3V)

PB0----LED(高電平有效)

3、上位機(jī)源碼

3.1?widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QWidget>
#include <QTcpServer>
#include <QTcpSocket>
namespace Ui {
class Widget;
}
#pragma pack(1)
struct QT_info
{
    unsigned char Head[2];
    uint8_t DHT11_BUF[2];//用于存放DHT11數(shù)據(jù)
};
#pragma pack()
class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = nullptr);
    ~Widget();

    //QTcpServer *tcpserver;//聲明一個(gè)QTcpserver的對(duì)象,用于監(jiān)聽
    QTcpSocket *tcpsocket;//創(chuàng)建服務(wù)器的套接字,用于與客戶端進(jìn)行通信

private slots:
    void on_open_Button_clicked();

    void on_close_Button_clicked();

    void on_send_Button_clicked();

    void connected_Slot();

    void readyRead_Slot();

    void on_pushButton_clicked();

private:
    Ui::Widget *ui;
};

#endif // WIDGET_H

3.2?widget.c?

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    //tcpserver = new QTcpServer(this);
    tcpsocket = new QTcpSocket(this);
}

Widget::~Widget()
{
    delete ui;
}

//client端的連接服務(wù)器按鈕
void Widget::on_open_Button_clicked()
{
     // 根據(jù)輸入的ip和port連接指定的服務(wù)器
//    tcpsocket->connectToHost(ui->IP_line->text(),ui->port_line->text().toUShort());
    tcpsocket->connectToHost("192.168.4.1",333);
    connect(tcpsocket,SIGNAL(connected()),this,SLOT(connected_Slot()));
    if(tcpsocket->waitForConnected(1000) == true){

    tcpsocket->write("Q");
    }

}

void Widget::connected_Slot()
{
    connect(tcpsocket,SIGNAL(readyRead()),this,SLOT(readyRead_Slot()));
}

void Widget::readyRead_Slot()
{
    QByteArray mytemp = tcpsocket->readAll();
    //ui->rece_TextEdit->appendPlainText(tcpsocket->readAll());
    if(!mytemp.isEmpty()){
    ui->rece_T_Edit->clear();
    ui->rece_S_Edit->clear();
    struct QT_info* info_RX = (struct QT_info*)mytemp.data(); // unsigned char *
    if(info_RX->Head[0]==0x55 && info_RX->Head[1]==0xFF) {
        QString T = QString::asprintf("%.2d",info_RX->DHT11_BUF[1]);
        QString S = QString::asprintf("%2d",info_RX->DHT11_BUF[0]);
        ui->rece_T_Edit->insertPlainText(T);
        ui->rece_S_Edit->insertPlainText(S);
    }
    mytemp.clear();
    }
}

void Widget::on_close_Button_clicked()
{
    tcpsocket->write("B");
    tcpsocket->close();
    ui->rece_T_Edit->clear();
    ui->rece_S_Edit->clear();

} 

void Widget::on_send_Button_clicked()
{
//    tcpsocket->write(ui->send_line->text().toLocal8Bit().data());
   tcpsocket->write("Q");
}

void Widget::on_pushButton_clicked()
{
    tcpsocket->write("B");
}

3.3?顯示圖

STM32+ESP8266+QT客戶端上位機(jī)顯示DHT11溫濕度與點(diǎn)燈

?4、下位機(jī)源碼

4.1 cubemax配置

?GPIO配置。

STM32+ESP8266+QT客戶端上位機(jī)顯示DHT11溫濕度與點(diǎn)燈

?串口配置,中斷打開。STM32+ESP8266+QT客戶端上位機(jī)顯示DHT11溫濕度與點(diǎn)燈

?4.2 keil部分源碼

func

#include "func.h"

struct QT_info QT_info_TX;
extern char buf;
uint16_t len;

void CSH(void)
{
	len = sizeof(QT_info_TX);
  DHT11_Init();//傳感器芯片初始化
  DHT11_ReadData(QT_info_TX.DHT11_BUF);//讀出DHT11傳感器數(shù)據(jù)(參數(shù)是存放數(shù)據(jù)的數(shù)組指針)
	HAL_Delay(200);
	//1 工作在路由模式
	printf("AT+CWMODE=2\r\n");
	HAL_Delay(200);
	
  //2 使能多鏈接
	printf("AT+CIPMUX=1\r\n");
	HAL_Delay(200);
	
	//3 建立TCPServer port = 333
  printf("AT+CIPSERVER=1\r\n");
	HAL_Delay(200);
	
	LED_OFF;
	QT_info_TX.Head[0]=0x55;
  QT_info_TX.Head[1]=0xFF;
	
}
void oled_ui(void)
{ 
	DHT11_ReadData(QT_info_TX.DHT11_BUF);//讀出DHT11傳感器數(shù)據(jù)(參數(shù)是存放數(shù)據(jù)的數(shù)組指針)
	HAL_Delay(100);
	HAL_UART_Receive_IT(&huart1, (uint8_t *)&buf, 1);		
	//發(fā)送數(shù)據(jù)
	printf("AT+CIPSEND=0,%d\r\n",len);
	HAL_Delay(200);
	
	HAL_UART_Transmit(&huart1,(uint8_t *)&QT_info_TX,sizeof(QT_info_TX),10);
}
#include "main.h"
#include "dht11.h"
#include "usart.h"
#include "string.h"


void CSH(void);
void alarm(void);
void oled_ui(void);
void Qt_UART_RxCallBack(unsigned char *Data,unsigned int Len);


__packed struct QT_info
{
	unsigned char Head[2];
	
	uint8_t DHT11_BUF[2];//用于存放DHT11數(shù)據(jù)
	
};

main

/* USER CODE BEGIN Header */
/**
  ******************************************************************************
  * @file           : main.c
  * @brief          : Main program body
  ******************************************************************************
  * @attention
  *
  * Copyright (c) 2023 STMicroelectronics.
  * All rights reserved.
  *
  * This software is licensed under terms that can be found in the LICENSE file
  * in the root directory of this software component.
  * If no LICENSE file comes with this software, it is provided AS-IS.
  *
  ******************************************************************************
  */
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "i2c.h"
#include "usart.h"
#include "gpio.h"

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "stdio.h"
char buf;
#include "func.h"
/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
void  HAL_UART_RxCpltCallback(UART_HandleTypeDef  *huart)//涓插彛涓柇鍥炶皟鍑芥暟
{
	if(huart1.Instance == USART1)
	{
		if(buf == 'Q')
		{
			 LED_ON;
      HAL_UART_Receive_IT(&huart1, (uint8_t *)&buf, 1);
		}
		else if(buf == 'B')
		{
			 LED_OFF;
      HAL_UART_Receive_IT(&huart1, (uint8_t *)&buf, 1);
		}
		HAL_UART_Receive_IT(&huart1, (uint8_t *)&buf, 1);
	}   
}
     
/* USER CODE END PTD */

/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
/* USER CODE END PD */

/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */

/* USER CODE END PM */

/* Private variables ---------------------------------------------------------*/

/* USER CODE BEGIN PV */

/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART1_UART_Init();
  MX_I2C1_Init();
  MX_USART2_UART_Init();
  /* USER CODE BEGIN 2 */
	CSH();
	
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {	
		oled_ui();
		
//	printf("1\r\n");
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

/**
  * @brief System Clock Configuration
  * @retval None
  */
void SystemClock_Config(void)
{
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

  /** Initializes the RCC Oscillators according to the specified parameters
  * in the RCC_OscInitTypeDef structure.
  */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    Error_Handler();
  }

  /** Initializes the CPU, AHB and APB buses clocks
  */
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
  {
    Error_Handler();
  }
}

/* USER CODE BEGIN 4 */

/* USER CODE END 4 */

/**
  * @brief  This function is executed in case of error occurrence.
  * @retval None
  */
void Error_Handler(void)
{
  /* USER CODE BEGIN Error_Handler_Debug */
  /* User can add his own implementation to report the HAL error return state */
  __disable_irq();
  while (1)
  {
  }
  /* USER CODE END Error_Handler_Debug */
}

#ifdef  USE_FULL_ASSERT
/**
  * @brief  Reports the name of the source file and the source line number
  *         where the assert_param error has occurred.
  * @param  file: pointer to the source file name
  * @param  line: assert_param error line source number
  * @retval None
  */
void assert_failed(uint8_t *file, uint32_t line)
{
  /* USER CODE BEGIN 6 */
  /* User can add his own implementation to report the file name and line number,
     ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  /* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */

dht11

/*
 * dht11.c
 *
 *  Created on: Oct 21, 2021
 *      Author: Administrator
 */

/*
//杜洋工作室出品
//洋桃系列開發(fā)板應(yīng)用程序
//關(guān)注微信公眾號(hào):洋桃電子
//洋桃開發(fā)板資料下載 www.DoYoung.net/YT
//即可免費(fèi)看所有教學(xué)視頻,下載技術(shù)資料,技術(shù)疑難提問
//更多內(nèi)容盡在 杜洋工作室主頁(yè) www.doyoung.net
*/

/*
《修改日志》
1-201708202309 創(chuàng)建。


*/



#include "dht11.h"
#include "main.h"

void DHT11_IO_OUT (void){ //端口變?yōu)檩敵?	GPIO_InitTypeDef GPIO_InitStruct = {0};
	GPIO_InitStruct.Pin = DHT11_DA_Pin;
	GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
	GPIO_InitStruct.Pull = GPIO_NOPULL;
	GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
	HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}

void DHT11_IO_IN (void){ //端口變?yōu)檩斎?	GPIO_InitTypeDef GPIO_InitStruct = {0};
	GPIO_InitStruct.Pin = DHT11_DA_Pin;
	GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
	GPIO_InitStruct.Pull = GPIO_PULLUP;
	HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}

void DHT11_RST (void){ //DHT11端口復(fù)位,發(fā)出起始信號(hào)(IO發(fā)送)
	DHT11_IO_OUT();
	HAL_GPIO_WritePin(GPIOB,DHT11_DA_Pin, GPIO_PIN_RESET);
	HAL_Delay(20); //拉低至少18ms
	HAL_GPIO_WritePin(GPIOB,DHT11_DA_Pin, GPIO_PIN_SET);
	delay_us(30); //主機(jī)拉高20~40us
}

uint8_t Dht11_Check(void){ //等待DHT11回應(yīng),返回1:未檢測(cè)到DHT11,返回0:成功(IO接收)
	uint8_t retry=0;
    DHT11_IO_IN();//IO到輸入狀態(tài)
    while (HAL_GPIO_ReadPin(GPIOB,DHT11_DA_Pin)&&retry<100){//DHT11會(huì)拉低40~80us
        retry++;
        delay_us(1);
    }
    if(retry>=100)return 1; else retry=0;
    while (!HAL_GPIO_ReadPin(GPIOB,DHT11_DA_Pin)&&retry<100){//DHT11拉低后會(huì)再次拉高40~80us
        retry++;
        delay_us(1);
    }
    if(retry>=100)return 1;
    return 0;
}

uint8_t Dht11_ReadBit(void){ //從DHT11讀取一個(gè)位 返回值:1/0
	uint8_t retry=0;
    while(HAL_GPIO_ReadPin(GPIOB,DHT11_DA_Pin)&&retry<100){//等待變?yōu)榈碗娖?        retry++;
        delay_us(1);
    }
    retry=0;
    while(!HAL_GPIO_ReadPin(GPIOB,DHT11_DA_Pin)&&retry<100){//等待變高電平
        retry++;
        delay_us(1);
    }
    delay_us(40);//等待40us	//用于判斷高低電平,即數(shù)據(jù)1或0
    if(HAL_GPIO_ReadPin(GPIOB,DHT11_DA_Pin))return 1; else return 0;
}

uint8_t Dht11_ReadByte(void){  //從DHT11讀取一個(gè)字節(jié)  返回值:讀到的數(shù)據(jù)
	uint8_t i,dat;
    dat=0;
    for (i=0;i<8;i++){
        dat<<=1;
        dat|=Dht11_ReadBit();
    }
    return dat;
}

uint8_t DHT11_Init (void){	//DHT11初始化
	DHT11_RST();//DHT11端口復(fù)位,發(fā)出起始信號(hào)
	return Dht11_Check(); //等待DHT11回應(yīng)
}

uint8_t DHT11_ReadData(uint8_t *h){ //讀取一次數(shù)據(jù)//濕度值(十進(jìn)制,范圍:20%~90%) ,溫度值(十進(jìn)制,范圍:0~50°),返回值:0,正常;1,失敗
	uint8_t buf[5];
	uint8_t i;
    DHT11_RST();//DHT11端口復(fù)位,發(fā)出起始信號(hào)
    if(Dht11_Check()==0){ //等待DHT11回應(yīng)
        for(i=0;i<5;i++){//讀取5位數(shù)據(jù)
            buf[i]=Dht11_ReadByte(); //讀出數(shù)據(jù)
        }
        if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4]){	//數(shù)據(jù)校驗(yàn)
            *h=buf[0]; //將濕度值放入指針1
			h++;
            *h=buf[2]; //將溫度值放入指針2
        }
    }else return 1;
    return 0;
}

//===============================================us延時(shí)函數(shù)
void delay_us(uint32_t us)//主頻72M
{
    uint32_t delay = (HAL_RCC_GetHCLKFreq() / 4000000 * us);
    while (delay--)
	{
		;
	}
}
/*********************************************************************************************
 * 杜洋工作室 www.DoYoung.net
 * 洋桃電子 www.DoYoung.net/YT
*********************************************************************************************/
#ifndef __DHT11_H
#define __DHT11_H

#include "stm32f1xx_hal.h"


void DHT11_IO_OUT (void);
void DHT11_IO_IN (void);
void DHT11_RST (void);
uint8_t Dht11_Check(void);
uint8_t Dht11_ReadBit(void);
uint8_t Dht11_ReadByte(void);
uint8_t DHT11_Init (void);
uint8_t DHT11_ReadData(uint8_t *h);
void delay_us(uint32_t us);
#endif

?文章來源地址http://www.zghlxwxcb.cn/news/detail-461009.html

?

到了這里,關(guān)于STM32+ESP8266+QT客戶端上位機(jī)顯示DHT11溫濕度與點(diǎn)燈的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • ESP8266模塊,STA模式(與手機(jī)搭建TCP通訊,EPS8266為客戶端)

    ESP8266模塊,STA模式(與手機(jī)搭建TCP通訊,EPS8266為客戶端)

    專題文章: ESP8266模塊,STA模式(與電腦搭建TCP通訊,ESP8266為客戶端) ESP8266模塊,STA模式(與電腦搭建TCP通訊,ESP8266為服務(wù)端) ESP8266模塊,SoftAP模式(與電腦搭建TCP通訊,ESP8266為客戶端) ESP8266模塊,SoftAP模式(與電腦搭建TCP通訊,ESP8266為服務(wù)端) ESP8266模塊,STA模式(

    2024年04月28日
    瀏覽(26)
  • ESP8266 ArduinoIDE 搭建web服務(wù)器與客戶端開發(fā)

    ESP8266 ArduinoIDE 搭建web服務(wù)器與客戶端開發(fā)

    ? 此模式中,esp8266 會(huì)連接到指定 wifi 進(jìn)行工作。 ? ?wifi 連接成功,esp8266 通過串口返回當(dāng)前局域網(wǎng) IP 此模式中,esp8266 會(huì)開啟一個(gè)指定名稱和密碼的熱點(diǎn)進(jìn)行工作。 ? ? ?在這里改寫了根目錄,他會(huì)向客戶端發(fā)送一個(gè)按鈕的頁(yè)面,點(diǎn)擊即向 \\\"/LED\\\" 路由下發(fā)送 POST 請(qǐng)求。 由于

    2024年02月04日
    瀏覽(22)
  • ESP8266-Arduino網(wǎng)絡(luò)編程實(shí)例-HTTPS客戶端數(shù)據(jù)請(qǐng)求

    超文本傳輸協(xié)議安全 (HTTPS) 是 HTTP的安全版本,HTTP 是用于在 Web 瀏覽器和網(wǎng)站之間發(fā)送數(shù)據(jù)的主要協(xié)議。HTTPS 經(jīng)過加密,以提高數(shù)據(jù)傳輸?shù)陌踩浴.?dāng)用戶傳輸敏感數(shù)據(jù)(例如通過登錄銀行賬戶、電子郵件服務(wù)或健康保險(xiǎn)提供商)時(shí),這一點(diǎn)尤其重要。 從技術(shù)上來講,HTTPS

    2023年04月08日
    瀏覽(18)
  • ESP32網(wǎng)絡(luò)編程-TCP客戶端數(shù)據(jù)傳輸

    本文將詳細(xì)介紹在Arduino開發(fā)環(huán)境中,實(shí)現(xiàn)一個(gè)ESP32 TCP客戶端,從而達(dá)到與TCP服務(wù)器數(shù)據(jù)交換的目標(biāo)。 Internet 協(xié)議(IP)是 Internet 的地址系統(tǒng),具有將數(shù)據(jù)包從源設(shè)備傳遞到目標(biāo)設(shè)備的核心功能。IP 是建立網(wǎng)絡(luò)連接的主要方式,奠定了 Internet 的基礎(chǔ)。IP 不負(fù)責(zé)數(shù)據(jù)包排序或錯(cuò)

    2024年02月03日
    瀏覽(26)
  • ESP32 HTTPS客戶端POST請(qǐng)求(跳過證書驗(yàn)證)

    ESP32 HTTPS客戶端POST請(qǐng)求(跳過證書驗(yàn)證)

    本文例程為ESP32 HTTPS客戶端POST請(qǐng)求 只有HTTPS請(qǐng)求部分,聯(lián)網(wǎng)部分省略默。。。 樂鑫ESP-IDF API參考文檔 函數(shù) esp_http_client_init 結(jié)構(gòu)體 constesp_http_client_config_t 此結(jié)構(gòu)體用于配置HTTP/HTTPS參數(shù) 設(shè)置HTTP/HTTPS請(qǐng)求方法 此接口可以手動(dòng)設(shè)置HTTP請(qǐng)求方式(可以覆蓋配置結(jié)構(gòu)體的設(shè)置) 設(shè)置

    2024年02月05日
    瀏覽(242)
  • ESP32藍(lán)牙實(shí)例-BLE服務(wù)器與客戶端通信

    在本文中,我們將介紹如何使用低功耗藍(lán)牙在兩個(gè) ESP32 開發(fā)板之間執(zhí)行 BLE 服務(wù)器客戶端通信。 換句話說,將介紹如何通過 BLE 在兩個(gè) ESP32 開發(fā)板之間交換數(shù)據(jù)。 服務(wù)器和客戶端之間的通信將通過 BLE 進(jìn)行,其中一個(gè) ESP32 板充當(dāng) BLE 服務(wù)器并將傳感器讀數(shù)發(fā)送到 ESP32 客戶端

    2024年02月09日
    瀏覽(29)
  • 手機(jī)、電腦mqtt客戶端通過騰訊云服務(wù)器遠(yuǎn)程連接ESP32

    手機(jī)、電腦mqtt客戶端通過騰訊云服務(wù)器遠(yuǎn)程連接ESP32

    ????????本文將實(shí)現(xiàn): ????????1、esp32與騰訊云物聯(lián)網(wǎng)服務(wù)器通過mqtt協(xié)議通信 ????????2、電腦和手機(jī)客戶端通過mqtt與騰訊云相通信 ????????3、騰訊云服務(wù)器內(nèi)部消息轉(zhuǎn)發(fā),將手機(jī)、電腦發(fā)布的主題轉(zhuǎn)發(fā)給esp32訂閱,實(shí)現(xiàn)手機(jī)、電腦與esp32的遠(yuǎn)程通信。 ?????

    2024年02月11日
    瀏覽(25)
  • 使用 Web-Socket 客戶端在兩個(gè) ESP32 之間進(jìn)行實(shí)時(shí)數(shù)據(jù)傳輸

    近年來, 基于Arduino和ESP32 的網(wǎng)絡(luò)服務(wù)器項(xiàng)目變得非常流行,并且對(duì)各種應(yīng)用都很有用。但是這種 Web 服務(wù)器的主要缺點(diǎn)之一是它的靜態(tài)特性。意味著通過 HTTP 更新網(wǎng)頁(yè),您需要更新整個(gè)網(wǎng)頁(yè),然后才能更新任何數(shù)據(jù)。這個(gè)問題有很多解決方法,比如幾秒鐘后自動(dòng)刷新網(wǎng)頁(yè)等等

    2024年02月07日
    瀏覽(44)
  • STM32+ESP8266+OneNet共同完成溫度顯示功能

    STM32+ESP8266+OneNet共同完成溫度顯示功能

    這次實(shí)驗(yàn)對(duì)應(yīng)的是我的本科畢業(yè)設(shè)計(jì),目標(biāo)是完成一個(gè)溫度測(cè)試平臺(tái),具有本地顯示,遠(yuǎn)程顯示,算法后臺(tái)校正的功能。為了適應(yīng)當(dāng)前信息化的物聯(lián)網(wǎng)發(fā)展方向,本文選擇一款分辨率可調(diào)的高線性度CMOS溫度傳感器作為感溫芯片,運(yùn)用STM32F103C8T6作為微控制器主控芯片,使用W

    2024年02月20日
    瀏覽(30)
  • ESP8266+STM32獲取網(wǎng)絡(luò)時(shí)間、OLED顯示時(shí)間&圖片&視頻。

    ESP8266+STM32獲取網(wǎng)絡(luò)時(shí)間、OLED顯示時(shí)間&圖片&視頻。

    先說說我的設(shè)計(jì)內(nèi)容的組成: 目錄 學(xué)習(xí)過程不易,發(fā)文共享以下學(xué)習(xí)過程~ 1. STM32控制ESP8266獲取網(wǎng)絡(luò)時(shí)間 第一步:電腦控制ESP8266獲取時(shí)間數(shù)據(jù); 2. STM32基于獲取到的時(shí)間使用定時(shí)器本地運(yùn)行 3. 使用OLED顯示時(shí)間數(shù)據(jù),包括自定義的文字顯示,圖片顯示,視頻顯示; 4. 完整的

    2024年02月08日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包