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

STM32F103C8T6+ESP8266WIFI+DHT11模塊連接巴法云

這篇具有很好參考價值的文章主要介紹了STM32F103C8T6+ESP8266WIFI+DHT11模塊連接巴法云。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、硬件介紹

1.MCU:STM32F103C8T6
2.ESP8266:正點原子WIFI模塊
3.串口模塊:正點原子串口模塊

二、準備工作

我們對Markdown編輯器進行了一些功能拓展與語法支持,除了標準的Markdown編輯器功能,我們增加了如下幾點新功能,幫助你用它寫博客:

  1. ESP8266固件刷寫
    我用的是安信可的固件,可以在官網(wǎng)上下載。正點原子也提供相關的刷寫教程

  2. 硬件連接
    單片機的串口3連接WiFi模塊。WiFi模塊的Vcc接3.3V。串口1接在串口模塊上。

三、STM32主要代碼介紹

mcu跟wifi模塊的代碼實現(xiàn)(涉及串口、定時器):

  1. 實現(xiàn)思想
    單片機向esp8266模塊發(fā)送at指令,并且在一定的時間內(nèi)等待esp8266的回復,如果回復錯誤的指令或者超時回復就把錯誤通過串口1發(fā)送到電腦上。

  2. 代碼介紹
    AT指令發(fā)送函數(shù)

uint8_t esp8266_send_cmd(char *cmd, char *ack, uint16_t waittime) //ESP8266發(fā)送指令(底層函數(shù))
{
	uint8_t res = 0;
	USART3_RX_STA = 0;
	memset(USART3_RX_BUF,0,USART3_REC_LEN); //將串口3的緩存空間清0
	WIFI_printf("%s\r\n", cmd); //調(diào)用WIFI模塊專用的發(fā)送函數(shù)
	if(waittime) //需要等待應答
	{
		while(--waittime) //等待倒計時
		{
			HAL_Delay(10);//HAL庫延時函數(shù)
			if(USART3_RX_STA&0x8000) //接收到期待的應答結果
			{
				if(esp8266_check_cmd((uint8_t *)ack))
				{
					printf("回復信息:%s\r\n",(uint8_t *)ack);//反饋應答信息
					break; //得到有效數(shù)據(jù)
				}
				USART3_RX_STA=0; //串口3標志位清0
			} 
		}
		if(waittime==0)res=1;
	}
	return res;
}

uint8_t* esp8266_check_cmd(uint8_t *str) //ESP8266檢查指令(底層函數(shù))
{
	char *strx=0;
	if(USART3_RX_STA&0X8000) //接收到一次數(shù)據(jù)了
	{
		USART3_RX_BUF[USART3_RX_STA&0X7FFF] = 0; //添加結束符
		printf("%s\r\n",(char*)USART3_RX_BUF);
		strx=strstr((const char*)USART3_RX_BUF,(const char*)str);
	} 
	return (uint8_t*)strx;
}

uint8_t esp8266_quit_trans(void) //ESP8266退出判斷(底層函數(shù))
{
	while((USART3->SR&0X40)==0); //等待發(fā)送空
	USART3->DR='+';      
	HAL_Delay(15); //大于串口組幀時間(10ms)
	while((USART3->SR&0X40)==0); //等待發(fā)送空
	USART3->DR='+';      
	HAL_Delay(15); //大于串口組幀時間(10ms)
	while((USART3->SR&0X40)==0); //等待發(fā)送空
	USART3->DR='+';      
	HAL_Delay(500); //等待500ms
	return esp8266_send_cmd("AT","OK",20); //退出透傳判斷
}

接收狀態(tài)標記、接收緩沖、接收狀態(tài)標記的宏定義

uint8_t USART1_RX_BUF[USART1_REC_LEN];//接收緩沖,最大USART_REC_LEN個字節(jié).
uint16_t USART1_RX_STA=0;//接收狀態(tài)標記//bit15:接收完成標志,bit14:接收到0x0d,bit13~0:接收到的有效字節(jié)數(shù)目
uint8_t USART1_NewData;//當前串口中斷接收的1個字節(jié)數(shù)據(jù)的緩存

uint8_t USART2_RX_BUF[USART2_REC_LEN];//接收緩沖,最大USART_REC_LEN個字節(jié).
uint16_t USART2_RX_STA=0;//接收狀態(tài)標記//bit15:接收完成標志,bit14:接收到0x0d,bit13~0:接收到的有效字節(jié)數(shù)目
uint8_t USART2_NewData;//當前串口中斷接收的1個字節(jié)數(shù)據(jù)的緩存
uint8_t RS485orBT;//當RS485orBT標志位為1時是RS485模式,為0時是藍牙模式

uint8_t USART3_RX_BUF[USART3_REC_LEN];//接收緩沖,最大USART_REC_LEN個字節(jié).
uint16_t USART3_RX_STA=0;//接收狀態(tài)標記//bit15:接收完成標志,bit14:接收到0x0d,bit13~0:接收到的有效字節(jié)數(shù)目
uint8_t USART3_NewData;//當前串口中斷接收的1個字節(jié)數(shù)據(jù)的緩存

串口3跟esp8266通信的底層函數(shù)

void WIFI_printf (char *fmt, ...)
{
	char buff[USART3_REC_LEN+1];  //用于存放轉(zhuǎn)換后的數(shù)據(jù) [長度]
	uint16_t i=0;
	va_list arg_ptr;
	va_start(arg_ptr, fmt);
	vsnprintf(buff, USART3_REC_LEN+1, fmt, arg_ptr);//數(shù)據(jù)轉(zhuǎn)換
	i=strlen(buff);//得出數(shù)據(jù)長度
	if(strlen(buff)>USART3_REC_LEN)i=USART3_REC_LEN;//如果長度大于最大值,則長度等于最大值(多出部分忽略)
    HAL_UART_Transmit(&huart3,(uint8_t *)buff,i,0xffff);//串口發(fā)送函數(shù)(串口號,內(nèi)容,數(shù)量,溢出時間)
    va_end(arg_ptr);
}
//WIFI模塊在TCP模式下的數(shù)據(jù)發(fā)送:TCP發(fā)送的規(guī)定是先發(fā)AT+CIPSEND=數(shù)量,等待返回“>“后再發(fā)送數(shù)據(jù)內(nèi)容。
//調(diào)用方法:WIFI_TCP_SEND("123\r\n"); //TCP方式發(fā)送字符123和回車換行
void WIFI_TCP_SEND (char *fmt, ...)
{
	char buff[USART3_REC_LEN+1];  //用于存放轉(zhuǎn)換后的數(shù)據(jù) [長度]
	uint16_t i=0;
	va_list arg_ptr;
	va_start(arg_ptr, fmt);
	vsnprintf(buff, USART3_REC_LEN+1, fmt, arg_ptr);//數(shù)據(jù)轉(zhuǎn)換
	i=strlen(buff);//得出數(shù)據(jù)長度
	if(strlen(buff)>USART3_REC_LEN)i=USART3_REC_LEN;//如果長度大于最大值,則長度等于最大值(多出部分忽略)
	WIFI_printf("AT+CIPSEND=%d\r\n",i);//先發(fā)送AT指令和數(shù)據(jù)數(shù)量
	HAL_Delay(100);//等待WIFI模塊返回">",此處沒做返回是不是">"的判斷。穩(wěn)定性要求高的項目要另加判斷。
    HAL_UART_Transmit(&huart3,(uint8_t *)buff,i,0xffff);//發(fā)送數(shù)據(jù)內(nèi)容(串口號,內(nèi)容,數(shù)量,溢出時間)
    va_end(arg_ptr);
}

串口1的重定向和串口3、定時器的中斷回調(diào)函數(shù),

void  HAL_UART_RxCpltCallback(UART_HandleTypeDef  *huart)//串口中斷回調(diào)函數(shù)
{
	
	if(huart ==&huart3)//判斷中斷來源(串口3:WIFI模塊)//接收完的一批數(shù)據(jù),還沒有被處理,則不再接收其他數(shù)據(jù)
	{
		if(USART3_RX_STA<USART3_REC_LEN)//還可以接收數(shù)據(jù)
		{
			__HAL_TIM_SET_COUNTER(&htim2,0); //計數(shù)器清空
			if(USART3_RX_STA==0) //使能定時器2的中斷
			{
			__HAL_TIM_ENABLE(&htim2); //使能定時器2
			}
			USART3_RX_BUF[USART3_RX_STA++] = USART3_NewData;//最新接收數(shù)據(jù)放入數(shù)組
		}
		else
		{
			USART3_RX_STA|=0x8000;//強制標記接收完成
		}
		HAL_UART_Receive_IT(&huart3,(uint8_t *)&USART3_NewData,1); //再開啟串口3接收中斷
		

	}
}
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	  if(htim ==&htim2)//判斷是否是定時器2中斷(定時器到時表示一組字符串接收結束)
    {
		USART3_RX_BUF[USART3_RX_STA&0X7FFF]=0;//添加結束符
		USART3_RX_STA|=0x8000;//接收標志位最高位置1表示接收完成
		__HAL_TIM_CLEAR_FLAG(&htim2,TIM_EVENTSOURCE_UPDATE );//清除TIM2更新中斷標志
		__HAL_TIM_DISABLE(&htim2);//關閉定時器2
    }
}
int fputc(int ch, FILE *f)                             //串口重定向
 {	 
	 HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);
   return ch;
 }

##不想寫了,主要核心代碼可以參考正點原子的,大家不懂的可以私信,看到一定回復。文章來源地址http://www.zghlxwxcb.cn/news/detail-426749.html

到了這里,關于STM32F103C8T6+ESP8266WIFI+DHT11模塊連接巴法云的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領支付寶紅包贊助服務器費用

相關文章

  • Openmv+STM32F103C8T6視覺巡線小車

    Openmv+STM32F103C8T6視覺巡線小車

    機器視覺巡線處理是參考openmv官方代碼 Openmv官網(wǎng)源代碼:book. openmv.cc/project/follow-lines.html 根據(jù)官網(wǎng)視頻及教程將源碼注入openmv中。 小車巡的是黑線,所以顏色閾值要更改。 在文件示例中打開helloworld.py。 打開工具/機器視覺/閾值編輯器/緩沖區(qū)。 將我們需要尋跡的黑線調(diào)至全

    2023年04月09日
    瀏覽(24)
  • STM32CubeMX配置--STM32F103C8T6最小系統(tǒng)板

    STM32CubeMX配置--STM32F103C8T6最小系統(tǒng)板

    首先是新建工程選擇左上角的 File 然后點擊 NewProject ,或者直接使用快捷鍵 Ctrl+N 新建工程 然后選擇開發(fā)板型號,在 Commercial Part Number 處輸入 STM32F103C8T6 然后在下方會有選擇 直接雙擊型號 就會進入配置界面 PINoutConfiguration (1)RCC修改 首先點擊左上角的 System Core 然后點擊

    2024年02月04日
    瀏覽(26)
  • SG90舵機的使用--STM32F103C8T6

    SG90舵機的使用--STM32F103C8T6

    SG90帶有一個3P的接頭 根據(jù)顏色分為 黃線(信號線) 紅線(電源線) 棕色 (地線) 舵機的 工作電壓 在 4.8V-6V ,接在STM32系統(tǒng)板上驅(qū)動不了,所以需要接電源模塊單獨的5V供電,我使用的是如圖所示的電源模塊 注: 如果STM32系統(tǒng)板供電和舵機供電不為同一模塊,則需要共地,

    2024年02月03日
    瀏覽(21)
  • ESP8266與手機相互通信 透傳模式(STM32F103C8T6 HAL庫)有APP和完整代碼

    ESP8266與手機相互通信 透傳模式(STM32F103C8T6 HAL庫)有APP和完整代碼

    一、目標 ? ? ? ? stm32f103c8t6用串口發(fā)送AT指令控制esp8266發(fā)送數(shù)據(jù)到手機APP上,同時手機也可以發(fā)送數(shù)據(jù)到stm32f103c8t6主控,控制LED的亮滅。 ? ? ? ? ?將esp8266模塊的GND、VCC、TXD、RXD、CH-PD與單片機對應引腳連接,其中TXD與RXD要反接,模塊在工作時CH-PD要處于高電平狀態(tài)。 二、

    2024年02月16日
    瀏覽(17)
  • STM32---stm32f103c8t6與stm32f103zet6之間的代碼移植轉(zhuǎn)換

    STM32---stm32f103c8t6與stm32f103zet6之間的代碼移植轉(zhuǎn)換

    目錄 一、將c8t6轉(zhuǎn)換為zet6 1、修改啟動文件 2、修改芯片 3、將MD修改為HD ?4、下載器的修改 5、修改完成,編譯成功 ?二、將zet6轉(zhuǎn)換為c8t6 最終結果如下:? ?將STM32F103C8改為STM32F103ZE ? 基本相同,反向即可。 ? ?

    2024年02月06日
    瀏覽(45)
  • [附源碼] STM32F103C8T6+外接MCP4725 外部DAC

    [附源碼] STM32F103C8T6+外接MCP4725 外部DAC

    ????????STM32F103C8T6最小系統(tǒng)板是大家很常用的一款單片機,它內(nèi)部有多個ADC模數(shù)轉(zhuǎn)換通道,但并 沒有DAC數(shù)模轉(zhuǎn)換功能 ,當需要進行數(shù)字量轉(zhuǎn)換為模擬量時就需要借助外部DAC。? ?? ????????MCP4725是具有非易失性存儲器的單通道12位緩沖電壓輸出DAC。用戶可將配置寄存器

    2024年02月04日
    瀏覽(47)
  • 基于STM32F103C8T6與ESP8266的物聯(lián)網(wǎng)智能溫度采集與藍牙OLED數(shù)字鐘的設計與實現(xiàn)

    作者: 顏孫煒 [外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-wC12xZrc-1673843611066)(C:UsersadminAppDataRoamingTyporatypora-user-imagesimage-20230110223524043.png)] 用STM32F103C8T6自有的RTC功能實現(xiàn)一款數(shù)字鐘的設計,包括溫度輸入檢測和顯示模塊、數(shù)字鐘顯示模塊

    2024年02月02日
    瀏覽(30)
  • MQ2煙霧傳感器 - STM32F103C8T6-HAL庫

    ADC.c 文件 ADC.h文件 main函數(shù)中的調(diào)用

    2024年04月26日
    瀏覽(38)
  • 【滄海拾昧】STM32F103C8T6/C6T6的ISP燒錄

    【滄海拾昧】STM32F103C8T6/C6T6的ISP燒錄

    #C0105 滄海茫茫千鐘粟,且拾吾昧一微塵 ——《滄海拾昧集》@CuPhoenix 【閱前敬告】 滄海拾昧集僅做個人學習筆記之用,所述內(nèi)容不專業(yè)不嚴謹不成體系 【如有問題必是本集記錄有謬,切勿深究】 ??對于某種STM32F103C8T6/C6T6最小系統(tǒng)板,沒有配置J-LINK/ST-LINK燒錄口,此時可以

    2024年02月03日
    瀏覽(46)
  • 基于STM32F103C8T6單片機的DHT11溫濕度傳感器與OLED顯示屏實時動態(tài)數(shù)據(jù)監(jiān)測系統(tǒng)設計

    基于STM32F103C8T6單片機的DHT11溫濕度傳感器與OLED顯示屏實時動態(tài)數(shù)據(jù)監(jiān)測系統(tǒng)設計

    標題: 摘要: 本文提出了一種利用STM32F103C8T6微控制器,結合DHT11數(shù)字溫濕度傳感器和OLED顯示屏實現(xiàn)環(huán)境溫濕度實時、直觀顯示的方法。該系統(tǒng)通過低功耗且精確的DHT11傳感器獲取環(huán)境溫濕度信息,并借助于STM32F103C8T6強大的處理能力和I/O資源進行數(shù)據(jù)讀取、解析以及控制OLE

    2024年01月19日
    瀏覽(30)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領取紅包

二維碼2

領紅包