精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

基于機智云物聯網平臺的溫濕度和光照強度獲取

機智云 ? 2023-08-30 08:12 ? 次閱讀

本文的開發項目由開發者發布在CSDN博客(F l e)分享,該設計采用esp8266燒寫機智云固件。并且esp8266與stm32進行通信,則stm32可以通過esp8266與機智云服務器進行數據交互,而機智云服務器可以和機智云app進行數據交互。為此,實現stm32通過esp8266可以與機智云app進行數據交互。

stm32作為MCU傳感器進行數據交互,得到傳感器采集的數值,所以完成的是傳感器和app的數據交互。由于本次實驗增加了對光照強度的采集,所以又增加了一個三色RGB燈外設。通過機智云app可以調節RGB燈的光強,以此來模擬光照強度的變化。整個設計的傳感器數據流向如下圖所示:

d07b2dea-46c9-11ee-8e12-92fbcf53809c.png

另外,對于用機智云app調節RGB燈的光強的數據流向如下圖:

d0a019ca-46c9-11ee-8e12-92fbcf53809c.png

01

傳感器的測試

本次設計利用STM32CubeMX進行開發,代碼設計過程分模塊進行,分別編寫測試用例驗證各模塊的功能,包括oled模塊、按鍵模塊、dht11模塊、光敏電阻模塊、rgb模塊。1、oled模塊① 接線:

d0b173be-46c9-11ee-8e12-92fbcf53809c.png

②代碼編寫:

本次設計中oled采用硬件SPI2驅動,STM32CubeMX的設計如下圖:

d0bb48da-46c9-11ee-8e12-92fbcf53809c.pngd0cf747c-46c9-11ee-8e12-92fbcf53809c.png

d0f15290-46c9-11ee-8e12-92fbcf53809c.png

利用STM32CubeMX生成的SPI主要代碼如上所示。在生成的SPI代碼上進一步編寫oled.c和oled.h文件。

oled.c封裝了以下的函數:

d129448e-46c9-11ee-8e12-92fbcf53809c.png

測試函數:

int main(void){ HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_SPI2_Init(); OLED_Init(); OLED_ShowString(0, 0, "wait for set esp8266,press key1 to set esp8266 with AIRLINK_MODE");}

③測試用例實驗結果:

d1490fee-46c9-11ee-8e12-92fbcf53809c.png

由上圖可知,oled模塊的顯示函數能夠正確顯示。

2、按鍵模塊

①接線:

d15a5f88-46c9-11ee-8e12-92fbcf53809c.png

KEY_R0接地,KEY_L0和KEY_L1可以用于檢測按鍵狀態。對應的引腳為:

d15ecc76-46c9-11ee-8e12-92fbcf53809c.png

②代碼編寫:

STM32CubeMX設計如下:

d16d5750-46c9-11ee-8e12-92fbcf53809c.png

PC11設置為輸出模式,PC10和PB5設置為輸入模式。

Key.c封裝了以下函數:

void key_init(void){ HAL_GPIO_WritePin(KEY_COM_GND_GPIO_Port,KEY_COM_GND_Pin,GPIO_PIN_RESET);}
void Test_key(void){ if(HAL_GPIO_ReadPin(KEY1_GPIO_Port, KEY1_Pin)==GPIO_PIN_SET) { OLED_ShowString(0,0,"key1_up"); } else { OLED_ShowString(0,0,"key1_down"); } if(HAL_GPIO_ReadPin(KEY2_GPIO_Port, KEY2_Pin)==GPIO_PIN_SET) { OLED_ShowString(0,10,"key2_up"); } else { OLED_ShowString(0,10,"key2_down"); } OLED_Refresh_Gram();}

測試用例:

int main(void){ MX_GPIO_Init(); key_init(); while(1) { Test_key(); }}

③測試用例實驗結果:

d1917f68-46c9-11ee-8e12-92fbcf53809c.png

由圖中可以看出,按鍵一被按下時顯示key1_down和key2_up,與理論相符。

3、dht11模塊

①接線:

d1f40f98-46c9-11ee-8e12-92fbcf53809c.png

②代碼編寫:

由于dht11的數據引腳有時需要作為輸入,有時需要作為輸出,所以不在STM32CubeMX設置。

Dht11.c主要封裝了以下函數:

d20a6126-46c9-11ee-8e12-92fbcf53809c.png

這里的us延時并沒有使用定時器來產生,而是用系統時鐘來實現:

void delay_us(uint32_t us){ uint32_t delay = (HAL_RCC_GetHCLKFreq() / 4000000 * us); while (delay--) { ; }}

測試用例:

int main(void){ HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_SPI2_Init(); OLED_Init(); while(1) { Test_dht11(); }
void Test_dht11(void){ char txt[16]; while(1) { DHT11_Read_Data(&humidity_integer,&humidity_decimal,&temperature_integer,&temperature_decimal); sprintf(txt, "temp:%d.%d", temperature_integer,temperature_decimal); OLED_ShowString(0,0,txt); sprintf(txt, "humi:%d.%d", humidity_integer,humidity_decimal); OLED_ShowString(0,10,txt); OLED_Refresh_Gram(); }}

③測試用例實驗結果:

d2222ba8-46c9-11ee-8e12-92fbcf53809c.png

由上圖可以看出,溫度為23.3℃,濕度為53.0%,濕度的小數為0,與理論相符。

4、光敏電阻模塊

①接線:

d22aaa44-46c9-11ee-8e12-92fbcf53809c.png②代碼編寫:

STM32CubeMX設置ADC1的IN0如下:

d2381f12-46c9-11ee-8e12-92fbcf53809c.png

Stm32Rct6的ADC是12位的,這里沒有更改的選項,則ADC讀取的最大值是2^12=4096。

這里采樣時間Sampling Time選擇1.5個周期。ADC采樣時間 = (采樣周期+12.5周期)* 1/ADC時鐘頻率,這里ADC采樣時間=(1.5+12.5)*1/12 = 1.167us。light_check5506.c主要封裝以下函數:

void light_check5506_init(void){ HAL_ADCEx_Calibration_Start(&hadc1); HAL_Delay(200);}
uint32_t light_check5506_getinitvalue(void){ HAL_ADC_Start(&hadc1); HAL_ADC_PollForConversion(&hadc1,50);//?Tê±50ms return HAL_ADC_GetValue(&hadc1);}
uint32_t light_check5506_get0to100value(void){ //°μ-->áá£o0~100 uint32_t value; value=light_check5506_getinitvalue(); value=4096-value;//?ê?êy?Yê???°μêy?Y??′ó value=(value*100/4096);//?ˉ?a0~100μ?êy,±?D??è3?ò?100?ù3y£?òò?aè?2?ê???êy return value;}
void Test_5506(void){ uint32_t value; char txt[16]; while(1) { value=light_check5506_get0to100value(); sprintf(txt, "light(0-100):%d", value); OLED_ShowString(0,0,txt); OLED_Refresh_Gram(); }}

測試用例:

main(void){ HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_SPI2_Init(); MX_ADC1_Init(); OLED_Init(); light_check5506_init(); while(1)` { Test_5506(); }}

③測試用例實驗結果:

d250d214-46c9-11ee-8e12-92fbcf53809c.png

將ADC讀取的值歸一化到0~100后光照強度的數值為18。

5、rgb模塊

①接線:

d272b654-46c9-11ee-8e12-92fbcf53809c.png②代碼編寫:

STM32CubeMX設置TIM8的三個通道如下:

d2981908-46c9-11ee-8e12-92fbcf53809c.png

計數周期Counter Period設置為255,這是為了便于查找RGB顏色表進行顏色設置,占空比Pulse設置為50%Rgb.c封裝了以下函數:

void rgb_init(void){ HAL_TIM_PWM_Start(&htim8,TIM_CHANNEL_1); HAL_TIM_PWM_Start(&htim8,TIM_CHANNEL_2); HAL_TIM_PWM_Start(&htim8,TIM_CHANNEL_3);}void Test_rgb(void){ rgb_setpwm(10.0,100.0,200.0);}void rgb_setpwm(uint8_t pwm_r,uint8_t pwm_g,uint8_t pwm_b){ __HAL_TIM_SET_COMPARE(&htim8, TIM_CHANNEL_1,pwm_r); __HAL_TIM_SET_COMPARE(&htim8, TIM_CHANNEL_2,pwm_g); __HAL_TIM_SET_COMPARE(&htim8, TIM_CHANNEL_3,pwm_b);}

測試用例:

main(void){ HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_SPI2_Init(); MX_TIM8_Init(); rgb_init(); OLED_Init(); while(1)` { Test_rgb(); }}

③測試用例實驗結果:

d2b552de-46c9-11ee-8e12-92fbcf53809c.png

由上圖可知RGB燈被點亮。

02

通過esp8266實現數據上傳和數據回傳

在進行數據上傳與數據回傳之前,首先進行用于打印數據的串口1的設置和用于stm32與esp8266通信的串口2。串口1:

d2bea6cc-46c9-11ee-8e12-92fbcf53809c.pngd2d0675e-46c9-11ee-8e12-92fbcf53809c.png

串口1設置PA9和PA10分別作為TX和RX,波特率為115200,不使能中斷。

串口2:

d2e17bac-46c9-11ee-8e12-92fbcf53809c.pngd2f6c746-46c9-11ee-8e12-92fbcf53809c.pngd32cd6f6-46c9-11ee-8e12-92fbcf53809c.png

串口2設置PA2和PA3分別作為TX和RX,波特率為9600,使能中斷。

1、數據上傳:溫濕度數據、關照強度數據

①主要代碼

void userHandle(void){ DHT11_Read_Data( & humidity_integer, & humidity_decimal, & temperature_integer, & temperature_decimal); currentDataPoint.valuehumidity = humidity_integer; currentDataPoint.valueLight_intensity = light_check5506_get0to100value(); currentDataPoint.valueDHT11 = temperature_integer + 0.1 * temperature_decimal; }

在userHandle(void)中添加溫濕度數據的采集以及光照強度的讀取。userHandle()是main函數中while循環的內容。

d33b8692-46c9-11ee-8e12-92fbcf53809c.png

由上圖可以看出,userHandle對于用戶來說是最頂層的,數據在userHandle中采集,依次經過gizCheckReport判斷是否上報當前狀態的數據、gizDataPoints2ReportData完成用戶區數據到上報型數據的轉換、gizReportData將轉換后的上報數據通過串口發送給 WiFi 模塊。

②設計結果:

首先確保esp8266和手機都已經連接到同一個網絡,這里用電腦作為這個網絡。

d342526a-46c9-11ee-8e12-92fbcf53809c.png

由上圖可知手機和esp8266已經連接上了電腦。機智云app連接上esp8266后得到上傳來的數據:

d353a84e-46c9-11ee-8e12-92fbcf53809c.pngd3769034-46c9-11ee-8e12-92fbcf53809c.png

Oled上的數據是stm32收集的,上圖的數據是機智云app通過esp8266收到的,兩者一致,說明數據交互是正確的。2、數據回傳:RGB三數值

①主要代碼

int8_t gizwitsEventProcess(eventInfo_t * info, uint8_t * gizdata, uint32_t len){ uint8_t i = 0; dataPoint_t * dataPointPtr = (dataPoint_t *)gizdata; moduleStatusInfo_t * wifiData = (moduleStatusInfo_t *)gizdata; protocolTime_t * ptime = (protocolTime_t *) gizdata; # if MODULE_TYPE gprsInfo_t * gprsInfoData = (gprsInfo_t *)gizdata; # else moduleInfo_t * ptModuleInfo = (moduleInfo_t *) gizdata; # endif if ((NULL == info) || (NULL == gizdata)) { return -1; } for (i=0; i < info->num; i++) { switch(info->event[i]) { case EVENT_LED_R: currentDataPoint.valueLED_R = dataPointPtr->valueLED_R; GIZWITS_LOG("Evt:EVENT_LED_R %d\n", currentDataPoint.valueLED_R); rgb_setpwm(currentDataPoint.valueLED_R, currentDataPoint.valueLED_G, currentDataPoint.valueLED_B); break; case EVENT_LED_G: currentDataPoint.valueLED_G = dataPointPtr->valueLED_G; GIZWITS_LOG("Evt:EVENT_LED_G %d\n", currentDataPoint.valueLED_G); rgb_setpwm(currentDataPoint.valueLED_R, currentDataPoint.valueLED_G, currentDataPoint.valueLED_B); break; case EVENT_LED_B: currentDataPoint.valueLED_B = dataPointPtr->valueLED_B; GIZWITS_LOG("Evt:EVENT_LED_B %d\n", currentDataPoint.valueLED_B); rgb_setpwm(currentDataPoint.valueLED_R, currentDataPoint.valueLED_G, currentDataPoint.valueLED_B); break; } }}

在gizwitsEventProcess中的EVENT_LED_R、EVENT_LED_G、EVENT_LED_B分別添加對對RGB三個PWM的賦值,賦值之后使其立即生效。

d3932de8-46c9-11ee-8e12-92fbcf53809c.png

protocolIssuedProcess被 gizwitsHandle 調用,接收來自云端或 app端下發的相關協議數據。ACTION_CONTROL_DEVICE進行“控制型協議”的相關處理,gizDataPoint2Event根據協議生成“控制型事件”,并進行相應數據類型的轉化轉換,gizwitsEventProcess是位于數據回傳過程中的最底層,根據已生成的“控制型事件”進行相應處理。

②設計結果:

首先確保esp8266和手機都已經連接到同一個網絡,這里用電腦作為這個網絡。

d342526a-46c9-11ee-8e12-92fbcf53809c.png

由上圖可知手機和esp8266已經連接上了電腦。機智云app設置RGB三個PWM數值,得到oled上的數據為:

d3b2eb7e-46c9-11ee-8e12-92fbcf53809c.pngd3baac9c-46c9-11ee-8e12-92fbcf53809c.png

由上圖可知,右圖為機智云app設置的三個PWM數值,左圖再oled上為同樣的數值,說明數據交互正確。

03

總 結

①通過這次設計接觸了STM32CubeMX這個軟件,相比與之前的標準庫,STM32CubeMX生成的Hal庫不僅封裝度更高,而且更有利于開發者進行快速開發,而且在本次實驗中機智云生成的代碼也是基于Hal庫的,這說明以后對于stm32來說,會越來越趨向于Hal開發。②官網永遠是對解決問題的最好地方,機智云的官方文檔給了我極大幫助。

③esp8266的燒錄對于供電要求十分苛刻,導致多次燒錄都失敗了,所以在制pcb的時候加上了esp8266的燒錄接口,以及GPIO的接地開關,還有復位電路。PCB擴展板圖如下:

d3da52e0-46c9-11ee-8e12-92fbcf53809c.png

④stmRct6板的供電十分差,由于剛開始只是接了ST-LINK進行供電,導致dht11和oled一起使用時dht11的VCC口只有2.6V,進而使得dht11通信一直不成功,這也說明了一切先從電源管理開始,確保供電沒問題再查找軟件問題。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 傳感器
    +關注

    關注

    2548

    文章

    50698

    瀏覽量

    752045
  • 數據
    +關注

    關注

    8

    文章

    6898

    瀏覽量

    88836
  • 物聯網
    +關注

    關注

    2903

    文章

    44284

    瀏覽量

    371325
  • STM32
    +關注

    關注

    2266

    文章

    10873

    瀏覽量

    354840
  • 機智云
    +關注

    關注

    2

    文章

    581

    瀏覽量

    26369
收藏 人收藏

    評論

    相關推薦

    溫室大棚溫濕度光照監測的重要性

    在科技日新月異的今天,現代農業正以飛快的速度向智能化、準確化邁進。其中,溫室大棚作為反季節種植、高效農業的重要載體,其內部的溫濕度光照條件直接關乎作物的生長質量與產量。因此,溫室大棚的溫濕度
    的頭像 發表于 08-28 17:25 ?326次閱讀

    機智開源自動化控制篇:溫濕度報警器

    這次使用STM32F103C8T6單片機、ESP-01S、DHT11、蜂鳴器以及0.96寸OLED(I2C)制作溫濕度報警器,為智能家居增添智能生態。基本工作進入機智開發者中心創建智能產品
    的頭像 發表于 08-06 08:10 ?283次閱讀
    <b class='flag-5'>機智</b><b class='flag-5'>云</b>開源自動化控制篇:<b class='flag-5'>溫濕度</b>報警器

    溫濕度監測系統應用

    、可靠的溫濕度監測系統顯得尤為重要。 溫濕度監測系統,通過溫度傳感器、智能控制終端等硬件設備,與管理平臺組成高精度傳感器網絡,在線采集室內溫濕度
    的頭像 發表于 07-26 16:15 ?359次閱讀

    藥品倉庫溫濕度監控系統

    和有效使用具有重要意義。 藥品倉庫溫濕度監控系統,結合聯網、無線通訊等技術,主要由傳感器、數據采集器、傳輸設備、管理平臺等組成。針對藥品
    的頭像 發表于 07-26 10:12 ?313次閱讀

    庫房溫濕度自動監測系統

    倉儲、庫房在管理上,環境控制都是重中之重。庫房溫濕度自動監測系統作為一種更為便捷的解決方案,已經得到廣泛的應用。 庫房溫濕度自動監測系統通過集成傳感器、數據采集器、傳輸設備和管理平臺等硬件設備,實現
    的頭像 發表于 07-09 18:00 ?657次閱讀

    糧倉溫濕度監測解決方案

    的損失。 糧倉溫濕度監測解決方案,通過GPRS無線傳輸的溫濕度傳感器、變送器等設備,利用無線網絡,通過管理平臺同步查看糧倉情況。根據不同應用場合的具體需求靈活快速配置,建立全面而有效
    的頭像 發表于 07-04 16:37 ?322次閱讀

    無線溫濕度監控系統

    解決方案,在需要監控的區域部署傳感器節點,實時感知環境溫濕度數據,利用無線傳感器網絡,對環境溫濕度的實時采集和傳輸,上傳至監控中心或平臺,用戶進行遠程查看和管理。一旦數據被采集,自動
    的頭像 發表于 05-30 16:43 ?723次閱讀

    倉庫環境溫濕度監測系統功能

    、大數據、聯網等技術開發,打造智能感知設備和互聯網完美結合,滿足不同倉庫工廠環境監測與安全管理防范的需要,互聯互通。 通過安裝在倉庫內的測點終端,通過4G/NB/LORA/WIFI傳輸方式,與倉儲環境監控
    的頭像 發表于 05-17 17:07 ?448次閱讀

    基于機智聯網的智能花卉栽培系統

    WiFi傳輸實現信息交互,并在機智聯網平臺實現實時監測和遠程操控。種植者可遠程監測土壤溫濕度
    的頭像 發表于 05-15 08:10 ?1263次閱讀
    基于<b class='flag-5'>機智</b><b class='flag-5'>云</b><b class='flag-5'>物</b><b class='flag-5'>聯網</b>的智能花卉栽培系統

    中易自主研發的冷鏈無線溫濕度自動監測管理系統概述

    中易結合多年的行業經驗,借助聯網技術、自主研發的冷鏈無線溫濕度自動監測管理系統,能夠實現對冰柜、冷庫、轉運箱、冷鏈車內溫濕度的實時監控、
    的頭像 發表于 03-21 11:17 ?1258次閱讀
    中易<b class='flag-5'>云</b>自主研發的冷鏈無線<b class='flag-5'>溫濕度</b>自動監測管理系統概述

    溫濕度監測聯網系統解決方案

    產品質量下降,甚至產生嚴重的經濟損失。因此,對溫濕度進行監測,可以確保產品質量,降低生產成本,提高企業效益。 基于聯網技術、無線通信技術、邊緣計算技術,通博聯提供全天候實時在線的
    的頭像 發表于 02-28 16:02 ?839次閱讀
    <b class='flag-5'>溫濕度</b>監測<b class='flag-5'>物</b><b class='flag-5'>聯網</b>系統解決方案

    機智平臺的高效溫濕度智能測控研發

    關鍵詞:機智平臺;溫濕度測控;WiFi網絡;高效精準;目錄1、功能實現2、系統結構搭建3、聯網
    的頭像 發表于 02-19 14:02 ?381次閱讀
    <b class='flag-5'>機智</b><b class='flag-5'>云</b><b class='flag-5'>平臺</b>的高效<b class='flag-5'>溫濕度</b>智能測控研發

    冷庫溫濕度聯網監控系統解決方案

    提供溫濕度數據采集到云端監控控制等功能,實現報警運維協同工作,遠程監控管理、設備資產分析等功能。將;將冷庫內制冷機PLC、中央空調、溫濕度傳感器等接入到數之能工業數據可視化平臺中,實現溫濕度
    的頭像 發表于 02-06 15:40 ?729次閱讀

    基于工業互聯網平臺的大棚溫濕度遠程監控系統

    狀況。數之能提供的工業互聯網平臺是基于聯網、數據采集、無線通信等技術,具有海量存儲、分配計算、動態擴展、系統可靠性高等特點。 通過將農業
    的頭像 發表于 12-18 13:56 ?319次閱讀

    PLC聯網網關如何實現大棚溫濕度遠程控制

    在智慧農業溫室大棚中,通常通過PLC聯網系統來監測和調節溫濕度參數,從而為農作物生長營造健康適宜的環境條件。現場溫濕度等傳感器、風機、加熱器、噴霧裝置等設備接入到PLC中,PLC編寫
    的頭像 發表于 12-01 14:11 ?702次閱讀
    PLC<b class='flag-5'>物</b><b class='flag-5'>聯網</b>網關如何實現大棚<b class='flag-5'>溫濕度</b>遠程控制