成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

STM32F4+ESP8266擬輝光鐘設(shè)計(一)簡介及時間獲取

番茄西紅柿 / 3252人閱讀

摘要:在搜索了一些資料后我把我的工作分成了兩個部分第一個部分就是時間的獲取第二個部分是燈光的控制。模塊聯(lián)網(wǎng)的方式是通過其與分別與串口的端和端相連通過串口通信發(fā)送指令來控制實現(xiàn)聯(lián)網(wǎng)。通過了解我發(fā)現(xiàn)可以通過芯片內(nèi)部的時鐘來實現(xiàn)時間的自走功能。

0 效果

話不多說,先來看看最后實現(xiàn)的效果(從左到右分別為時、分、秒,當時設(shè)計的時候忘了設(shè)計中間的冒號了
-_-):


畫了PCB,請朋友幫忙畫了solidworks打印出來框架,然后買螺絲進行拼裝。

1 簡介

某天逛某寶的時候突然發(fā)現(xiàn)了擬輝光鐘,當時就覺得挺好看的,但一看價格就直接勸退了(這里放了兩張價格)
于是我產(chǎn)生了自己動手做的想法?,F(xiàn)在網(wǎng)上搜了一下擬輝光鐘的工作原理:

擬輝光鐘是利用光線在亞克力板上的劃痕處產(chǎn)生光線折射,使得劃痕處的光線較亮,配置以隨時間而變的燈光,達到類似于輝光鐘的效果。

在搜索了一些資料后,我把我的工作分成了兩個部分,第一個部分就是時間的獲取,第二個部分是燈光的控制。下面主要就這兩個大的模塊介紹下具體怎么實現(xiàn)的。

擬輝光鐘
時間獲取
燈光控制

2 STM32F4+ESP8266獲取網(wǎng)絡(luò)時間

我之前的項目中一直在用STM32,比較熟悉,所以這次依然使用了STM32作為主控板。獲取時間的大體思路是利用ESP8266WIFI模塊能夠連網(wǎng)的功能,在上電后能夠通過MCU控制ESP8266連接到網(wǎng)絡(luò)并發(fā)送相應(yīng)的API請求,獲得當前時間,之后把當前時間賦值到RTC時鐘,實現(xiàn)自走的功能。

2.1 ESP8266的聯(lián)網(wǎng)和API請求

首先先簡要介紹一下ESP8266模塊,在安可信官網(wǎng)上有此模塊的詳細介紹,這里放一個鏈接:
安可信,在它用戶文檔里對該模塊的介紹是這樣的:

ESP8266是一款超低功耗的UART-WiFi 透傳模塊,擁有業(yè)內(nèi)極富競爭力的封裝尺寸和超低能耗技術(shù),專為移動設(shè)備和物聯(lián)網(wǎng)應(yīng)用設(shè)計,可將用戶的物理設(shè)備連接到Wi-Fi 無線網(wǎng)絡(luò)上,進行互聯(lián)網(wǎng)或局域網(wǎng)通信,實現(xiàn)聯(lián)網(wǎng)功能。

此模塊擁有獨立控制能力,可以作為主控芯片使用,也可以作為其他控制器的聯(lián)網(wǎng)芯片,使主控制器擁有聯(lián)網(wǎng)功能。
模塊聯(lián)網(wǎng)的方式是通過其RXDTXD分別與串口的TX端和RX端相連,通過串口通信發(fā)送AT指令來控制ESP8266實現(xiàn)聯(lián)網(wǎng)。有關(guān)模塊的STA、AP、STA+AP模式還有AT指令集可以參考以下鏈接:
ESP8266 AT指令集https://blog.csdn.net/qq_45104817/article/details/105834987
模塊教程:https://blog.csdn.net/mbs520/article/details/109572070
在本項目通過使用STM32上的USART6給8266發(fā)送以下的AT指令實現(xiàn)了聯(lián)網(wǎng)功能:

1.設(shè)置工作模式:

AT+CWMODE=1 //設(shè)置模式,1為STA模式(從機)

2.重啟: 重啟可以保證模式能夠轉(zhuǎn)換成功

AT+RST

3.聯(lián)網(wǎng):(在這里遇到了一個小問題,就是我在學校連校園網(wǎng)的話需要通過用戶認證,但單純的用這個指令不能聯(lián)網(wǎng)成功。網(wǎng)上說可以通過串口發(fā)送響應(yīng)的完成認證的請求頭,但后來我通過筆記本連網(wǎng)后再開熱點解決了):

AT+CWJAP="name","password" //name為你想連的WIFI名稱,password為你的WIFI密碼

4.設(shè)置連接方式 只有將連接方式設(shè)置為單路連接才能啟用TCP/IP

AT+CIPMUX=0

TCP/IP是一種網(wǎng)絡(luò)通信協(xié)議,可以理解為設(shè)備連接到目標網(wǎng)絡(luò)后,通過這個特有的雙方都理解的語言才可以實現(xiàn)數(shù)據(jù)通信,詳細的介紹可以參考:https://zhuanlan.zhihu.com/p/33889997
5.連接到目標站點 第4步設(shè)置了單路連接,現(xiàn)在就可以啟用TCP連接到API站點獲取數(shù)據(jù)了!

AT+CIPSTART="TCP","quan.suning.com",80 //協(xié)議形式;站點IP或網(wǎng)址;端口號(指定一個沒有被占用的即可)

這里quan.suning.com即為我們要用的API,連接到該網(wǎng)絡(luò)后,可以通過發(fā)送標準形式的請求頭來獲取當前時間。
6.開啟透傳 開啟透傳模式,為傳送報頭做準備

AT+CIPMODE=1

7.發(fā)送報頭,接收數(shù)據(jù)

res=esp8266_send_data("GET http://quan.suning.com/getSysTime.do HTTP/1.1/r/nHost: quan.suning.com/r/n/r/n",50);

返回來的數(shù)據(jù)如下:

receive:HTTP/1.1 200 OKDate: Sat, 16 Oct 2021 10:31:07 GMTContent-Type: text/html;charset=UTF-8Content-Length: 62Connection: keep-aliveServer: styxSet-Cookie: tradeLdc=NJGX_YG;Expires=Sat, 16-Oct-21 22:31:07 GMTStrict-Transport-Security: max-age=300Cache-Control: no-cache,no-store,max-age=0,s-maxage=0Access-Control-Allow-Credentials: trueX-Ser: BC98_dx-lt-yd-jiangsu-zhenjiang-3-cache-16, BC204_lt-shanxi-taiyuan-6-cache-4X-Cache: MISS from BC204_lt-shanxi-taiyuan-6-cache-4(baishan){"sysTime2":"2021-10-16 18:31:07","sysTime1":"20211016183107"}

我們的主要目的是獲取當前時間,所以返回來的數(shù)據(jù)中大部分是沒有用的,通過觀察發(fā)現(xiàn)我們只需要提取出“sysTime2”后面跟的時間即可,所以我們需要一些算法來把時間提取出來。我的思路就是先通過字符串查找函數(shù)strstr找到"sysTime2"所在位置的指針,再根據(jù)時、分、秒相對于指針的偏移量依次把數(shù)據(jù)提取出來,這里我把我的代碼放在下面,當然大家也可以設(shè)置更加高效的算法:

#define HOURS_ADD_DRES 22  //小時相對于data_pt指針的偏移量是22char *data_pt=NULL;	while(!data_pt){	res=esp8266_send_data("GET http://quan.suning.com/getSysTime.do HTTP/1.1/r/nHost: quan.suning.com/r/n/r/n",50);	data_pt = strstr((const char *) res,(const char *)"sysTime2");//在返回數(shù)據(jù)中找sysTime2	}	printf("GET TIME SUCCESS!/r/n");//如果找到了,data_pt非空,退出循環(huán),獲取時間成功	int k=0;	char time[10];  	char *hour_string;//存放時間的字符串	int hour,second,minute=0;    hour_string = data_pt + HOURS_ADD_DRES;  //hour_string指針指向時-分-秒時間的小時位第一位,精準鎖定	for(i=0;i<=7;i++)//把各位的數(shù)據(jù)提取出來	{		time[k]=*hour_string;	  hour_string++;k++;	}	time[8]='/0';	hour=(time[0]-48)*10+(time[1]-48);	minute=(time[3]-48)*10+(time[4]-48);	second=(time[6]-48)*10+(time[7]-48);//ASCII碼轉(zhuǎn)換成數(shù)字,方便后續(xù)	printf("time:%s",time);//把當前獲取到的時間打印到串口

可以看到串口輸出了正確的值,獲取時間成功了!

2.2 RTC時鐘的設(shè)置

在這之前我們已經(jīng)通過ESP8266聯(lián)網(wǎng)實現(xiàn)了當前時間的獲取,但如此這樣一直獲取時間顯然是不現(xiàn)實的,一方面每次發(fā)送請求有一定的失敗概率,如果獲取時間失敗那么時間的顯示就會不連續(xù)。另一方面網(wǎng)站面臨多次重復的請求會對你的IP地址進行屏蔽來防止惡意攻擊。此外如此頻繁的請求也會消耗太多的資源放在請求上,導致程序的效率不高。通過了解我發(fā)現(xiàn)可以通過芯片內(nèi)部的RTC時鐘來實現(xiàn)時間的自走功能。
有關(guān)RTC時鐘的具體實現(xiàn)與詳解可以參考這篇RCT詳解
通過配置RTC,將ESP8266模塊獲取的時間寫入RTC,之后可以利用RTC的秒中斷或者根據(jù)RTC的計數(shù)器變動來刷新當前時間值,在燈光上進行不同的顯示。

RTC_Set_Time(hour,minute,second,1);

此代碼實現(xiàn)了隨著時間的變化刷新顯示,同時,也可以采用秒中斷的方法(后者更加精確

	RTC_TimeTypeDef RTC_TimeTypeInitStructure;	RTC_GetTime(RTC_Format_BIN,&RTC_TimeTypeInitStructure);	flags0=RTC_TimeTypeInitStructure.RTC_Seconds%10;	flags1=RTC_TimeTypeInitStructure.RTC_Seconds/10;			flagm0=RTC_TimeTypeInitStructure.RTC_Minutes%10;	flagm1=RTC_TimeTypeInitStructure.RTC_Minutes/10;		flagh0=RTC_TimeTypeInitStructure.RTC_Hours%10;	flagh1=RTC_TimeTypeInitStructure.RTC_Hours/10;		if(flags0!=befores0){		ws281x_showNum(RTC_TimeTypeInitStructure.RTC_Seconds%10,5,1);		befores0=flags0;}	if(flags1!=befores1){		ws281x_showNum(RTC_TimeTypeInitStructure.RTC_Seconds/10,4,0);		befores1=flags1;}		if(flagm0!=beforem0){		ws281x_showNum(RTC_TimeTypeInitStructure.RTC_Minutes%10,3,1);		beforem0=flagm0;}	if(flagm1!=beforem1){		ws281x_showNum(RTC_TimeTypeInitStructure.RTC_Minutes/10,2,0);		beforem1=flagm1;}		if(flagh0!=beforeh0){		ws281x_showNum(RTC_TimeTypeInitStructure.RTC_Hours%10,1,1);		beforeh0=flagh0;}	if(flagh1!=beforeh1){		ws281x_showNum(RTC_TimeTypeInitStructure.RTC_Hours/10,0,0);		beforeh1=flagh1;}

在下一篇文章中會具體介紹燈光控制模塊!謝謝大家的支持!

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/125319.html

相關(guān)文章

  • 基于STM32平臺的數(shù)字溫度顯示器系統(tǒng)設(shè)計

    摘要:帶中文字庫的是一種具有位位并行線或線串行多種接口方式,內(nèi)部含有國標一級二級簡體中文字庫的點陣圖形液晶顯示模塊其顯示分辨率為。貼片按鍵模塊支持標準的協(xié)議,完整的協(xié)議棧。以最低成本提供最大實用性,為功能嵌入其他系統(tǒng)提供無限可能。 項目簡介 開發(fā)環(huán)境: Keil5.14,CubeMX6.0.1,主...

    villainhr 評論0 收藏0
  • 基于STM32ESP8266 WIFI與ONENET通信連接(2),云平臺以手機APP數(shù)據(jù)顯示

    摘要:基于的與通信連接,實現(xiàn)溫濕度數(shù)據(jù)互傳,控制第一步,在實現(xiàn)將傳感器數(shù)據(jù)采集之后,并且完成配網(wǎng)步驟,可以正常通過模塊正常將數(shù)據(jù)發(fā)送到云平臺之后進行以下閱讀,上述內(nèi)容可以跳轉(zhuǎn)到以下鏈接進行查看具體操作。 ...

    antz 評論0 收藏0
  • 01.ESP8266開發(fā)方式知多少

    摘要:開發(fā)方式是樂鑫為開發(fā)者提供的物聯(lián)應(yīng)開發(fā)平臺,包括基礎(chǔ)平臺以及上層應(yīng)開發(fā)示例,如智能燈智能開關(guān)等。指令開發(fā)方式作為芯片,指令開發(fā)也是必不可少的。開發(fā)方式即,意為運行在單片機上的。 ...

    sushi 評論0 收藏0
  • stm32f373利用esp8266連接onenet平臺

    摘要:添加設(shè)備名和鑒權(quán)信息。記錄如下數(shù)據(jù)二引腳連接和接電源接地和連接至配置的串口三代碼編寫串口配置單片機需配置兩個串口,串口打印至串口助手,顯示連接狀態(tài)。串口用來發(fā)送信息至串口配置代碼如下系列配置和系列配置不同點在于口上拉和推挽配置略有不同。 ...

    sorra 評論0 收藏0
  • 2021-09-04

    摘要:使用實現(xiàn)連網(wǎng)實現(xiàn)巴法云物聯(lián)網(wǎng)使用硬件程序思路基于正點原子的測試程序在巴法云物聯(lián)網(wǎng)創(chuàng)建的主題初始化代碼比較簡陋主函數(shù)代碼如果想用串口助手調(diào)試,接線方法如下使用硬件我這里使用的是正點原子家的開發(fā)板精英版和模塊。 ...

    Zack 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<