摘要:為了防止數(shù)據(jù)沖突采用輪詢的方式,輪詢發(fā)送數(shù)據(jù)。使用作為核心的開發(fā)板,需要的資源定時器中斷,外部中斷,串口接受中斷。定時器負責輪詢發(fā)送關鍵字給模塊,并由發(fā)送給各終端節(jié)點的模塊。
實現(xiàn)功能:
(1)能夠實時檢測顯示土壤濕度,當需要澆水的時候自動打開灌溉系統(tǒng),土壤濕度滿足要求后,關閉灌溉系統(tǒng);
(2)檢測顯示二氧化碳濃度,過高時,通過繼電器打開通風排氣扇,同時將二氧化碳濃度數(shù)值傳輸?shù)浇K端進行提示;
(3)能夠實時檢測顯示土壤酸堿度,超標時候能給出報警并提示;
(4)遠程異地和檢測與控制:傳感器所采集到的信息,通過LoRa模塊發(fā)送給網關,網關以有線連接的方式通過WiFi模塊發(fā)送給云端,APP可以隨時查看大棚內的二氧化碳濃度、土壤濕度與酸堿度的情況;
(5)系統(tǒng)平時可以處于自動模式工作,當需要修改參數(shù)時,可以進行手動模式,手動控制可以通過手機和前端按鍵進行修改,并設置閾值。修改后,將按照新的參數(shù)進行工作。
本系統(tǒng)由LoRa節(jié)點,LoRa網關,智能手機3部分組成,整體結構如圖2-1所示。兩個大棚通過LoRa模塊傳輸數(shù)據(jù)到網關,網關將所有數(shù)據(jù)整理后上傳到云端。
本次使用的是正點原子的LoRa模塊,具體配置可以參考手冊進行。為了方便我使用的模式為廣播,只需要將三個LoRa模塊地址、信道、速率相同就可以通信了。由于處于廣播模式下,當一個模塊發(fā)送指令時其他另外兩個模塊都會接受到信息,所以在開發(fā)板接受到數(shù)據(jù)的時候需要做一下驗證處理。為了防止數(shù)據(jù)沖突采用輪詢的方式,輪詢發(fā)送數(shù)據(jù)。例如:將終端節(jié)點A1和A2的關鍵字設置為‘DataA1’和‘DataA2’,網關發(fā)送關鍵字‘DataA1’給終端節(jié)點A1和A2同時接受到了關鍵字‘DataA1’,此時終端節(jié)點都進入串口中斷中判斷關鍵字是否需要回復,終端A1判斷為是則回復采集的數(shù)據(jù)到網關。
網關的主要功能就是接受終端節(jié)點的數(shù)據(jù)、通過WiFi模塊發(fā)送數(shù)據(jù)到云端、下發(fā)閾值到終端節(jié)點。使用STMF407作為核心的開發(fā)板,需要的資源:定時器中斷,外部中斷,串口接受中斷。
按鍵的任務就是負責增加或者減少下發(fā)的閾值
串口2中斷接受和處理LoRa模塊發(fā)送的數(shù)據(jù),串口3中斷是接受和處理WiFi模塊發(fā)送的數(shù)據(jù)(設計思路同串口2)。
定時器4負責輪詢發(fā)送關鍵字給LoRa模塊,并由LoRa發(fā)送給各終端節(jié)點的LoRa模塊。定時器3負責定時發(fā)送數(shù)據(jù)給WiFi模塊,WiFi模塊發(fā)送數(shù)據(jù)到云端。
#include "lora.h"void LoRa_Init(void){ GPIO_InitTypeDef GPIO_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC|RCC_AHB1Periph_GPIOF, ENABLE);//使能GPIOC,GPIOF時鐘 RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);//使能SYSCFG時鐘 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //MD0引腳 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//輸出模式 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽輸出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100M GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;//下拉 GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化GPIOE2,3,4 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; //AUX引腳 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//普通輸入模式 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100M GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;//下拉 GPIO_Init(GPIOF, &GPIO_InitStructure);//初始化 SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOF, EXTI_PinSource6);//PC0 連接到中斷線0 /* 配置EXTI_Line0 */ NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;//外部中斷0 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;//搶占優(yōu)先級0 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;//子優(yōu)先級2 NVIC_InitStructure.NVIC_IRQChannelCmd = DISABLE;//使能外部中斷通道 NVIC_Init(&NVIC_InitStructure);//配置 LORA_MD0=0; LORA_AUX=0; while(LORA_AUX)//確保LORA模塊在空閑狀態(tài)下(LORA_AUX=0) { delay_ms(100); } Lora_uart_init(115200);//初始化串口3 LORA_MD0=1;//進入AT模式 delay_ms(15); while(Lora_setCmd("AT/r/n","OK",0)) ; delay_ms(5); Lora_Clear(); delay_ms(5); while(Lora_setCmd("AT+ADDR=01,23/r/n","OK",0)) ; delay_ms(5); while(Lora_setCmd("AT+WLRATE=24,5/r/n","OK",0)) ; delay_ms(5); LORA_MD0=0; //進入透傳模式 Lora_uart_init(9600); delay_ms(10);}
void USART3_IRQHandler() //串口3中斷服務程序{ u8 Res; if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET) //接收中斷(接收到的數(shù)據(jù)必須是0x0d 0x0a結尾) { Res =USART_ReceiveData(USART3);//(USART1->DR); //讀取接收到的數(shù)據(jù) //printf("%d",Res); if(counts == 0) { Lora_Clear(); } read_bufs[counts++] = Res; //判斷格式 if(Res == 0xfe) { counts = 0; } else if(Res == "}") { counts = 0; USART_Cmd(USART3, DISABLE);//關閉 #if 0 printf("%s/r/n",read_bufs); #endif Lora_Rx_data();//解析數(shù)據(jù) USART_Cmd(USART3, ENABLE);//打開 } if(counts>500) { counts = 0; } USART_ClearFlag(USART3, USART_IT_RXNE); } }
void USART2_IRQHandler(void) //串口2中斷服務程序{ u8 Res; if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) //接收中斷(接收到的數(shù)據(jù)必須是0x0d 0x0a結尾) { Res =USART_ReceiveData(USART2);//(USART1->DR); //讀取接收到的數(shù)據(jù) if(counts_2 == 0) { wifi_Clear(); } read_bufs_HC[counts_2++] = Res; //判斷數(shù)據(jù)格式 if(Res == "{") { counts_2 = 0; } else if(Res == "}") { counts_2 = 0; USART_Cmd(USART2, DISABLE);//關閉 printf("%s/r/n",read_bufs_HC); HC25_Rx_Data(); //解析數(shù)據(jù) USART_Cmd(USART2, ENABLE);//開啟 } if(counts_2>200) { counts_2 = 0; } USART_ClearFlag(USART2, USART_IT_RXNE); } }
void TIM3_IRQHandler(void){ if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET) //溢出中斷 { if(STA==0){ //Jason數(shù)據(jù)格式 sprintf(jason," {/n " "/"CO2_1/":%d," "/"CO2pre_1/":%d," "/"PH_1/":%d," "/"PHpre_1/":%d," "/"SoilHum_1/":%d," "/"SoilHumpre_1/":%d," "/"CO2_2/":%d," "/"CO2pre_2/":%d," "/"PH_2/":%d," "/"PHpre_2/":%d," "/"SoilHum_2/":%d," "/"SoilHumpre_2/":%d" "/n}",data.CO2_data,data.CO2_data_Pre,data.PH,data.PH_Pre,data.Soil,data.Soil_Pre ,data1.CO2_data,data1.CO2_data_Pre,data1.PH,data1.PH_Pre,data1.Soil,data1.Soil_Pre); HC25_setData(jason); //發(fā)數(shù)據(jù) } } TIM_ClearITPendingBit(TIM3,TIM_IT_Update); //清除中斷標志位}
void TIM4_IRQHandler(void){ char tx_buff[80]; char tx_buf2[80]; if(TIM_GetITStatus(TIM4,TIM_IT_Update)==SET) //溢出中斷 { TX_time++; //輪詢標志位 switch(TX_time){ case TX_TIME://等于1 if(TX_1){//判斷預設值發(fā)送標志位 sprintf(tx_buff,"0xfeDATA:%d:%d:%d:%d:%d:%d}",CO2Pre1,SoilPre1,PHPre1,Water_IT1,Fan_IT1,Beef_IT1); Lora_setData(tx_buff); TX_1=0; TXcope1=1; }else Lora_setData("0xfeTX1:A}/r/n");//輪詢關鍵字1 break; case TX_TIME+TIME_ADD://等于2 if(TX_2){//判斷預設值發(fā)送標志位 sprintf(tx_buf2,"0xfedataer:%d:%d:%d:%d:%d:%d}",CO2Pre2,SoilPre2,PHPre2,Water_IT2,Fan_IT2,Beef_IT2); Lora_setData(tx_buf2); TX_2=0; TXcope2=1; } else Lora_setData("0xfetxer:b}/r/n"); TX_time=0;//輪詢標志位 break; default: break; } } TIM_ClearITPendingBit(TIM4,TIM_IT_Update); //清除中斷標志位}
有問題私信或評論區(qū)-_-
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/122282.html
摘要:本文分享幾種典型具有實際應用過的智慧農業(yè)物聯(lián)網解決方案,供大家參考。智慧農業(yè)物聯(lián)網解決方案由三部分組成智慧農業(yè)物聯(lián)網平臺智慧農業(yè)物聯(lián)網網關無線節(jié)點。 智慧農業(yè)是現(xiàn)代農業(yè)發(fā)展的必然趨勢,也是科學技術發(fā)展的必然結果。本文分享幾種典型具有實際應用過的智慧農業(yè)物聯(lián)網解決方案,供大家參考。 結合多年與...
摘要:物聯(lián)網技術四層面對于標準的物聯(lián)網系統(tǒng),可以分為四層感知識別層網絡構建層管理服務層和綜合應用層。網絡構建層數(shù)據(jù)傳輸網絡是物聯(lián)網最重要的基礎設施之一。 1.1什么是物聯(lián)網 ????????從字面意思來說十分好理解——萬物相連的互聯(lián)網,其實就是將日常生活中的一些設備以數(shù)字化方式連接世界的方式。這些...
摘要:所幸,鄙人所在的硬件專業(yè),指導老師并不懂軟件,他只是想要一個農業(yè)物聯(lián)網的監(jiān)測系統(tǒng),能提供給我的就是一個數(shù)據(jù)庫,帶著一個物聯(lián)網系統(tǒng)運行一年所保存的傳感器數(shù)據(jù)。該物聯(lián)網監(jiān)測系統(tǒng)整體上可分為三層數(shù)據(jù)庫層,服務器層和客戶端層。的執(zhí)行是同步的。 畢設大概是大學四年里最坑爹之一的事情了,畢竟一旦選題不好,就很容易浪費一年的時間做一個并沒有什么卵用,又不能學到什么東西的雞肋項目。所幸,鄙人所在的硬件...
摘要:國際物聯(lián)網博覽會蘇州站于月日日蘇州國際博覽中心順利舉行。優(yōu)锘科技非常榮幸地受邀,帶著最高性能的產品亮相此次展會,優(yōu)質的商務接待及專業(yè)技術展示,為廣大行業(yè)客戶帶來最佳的產品體驗。 IOTE 2019國際物聯(lián)網博覽會--蘇州站于3月13日-15日蘇州國際博覽中心順利舉行。優(yōu)锘科技非常榮幸地受邀,帶著最高性能的ThingJS產品亮相此次展會,優(yōu)質的商務接待及專業(yè)技術展示,為廣大行業(yè)客戶帶來最...
閱讀 2417·2021-11-19 09:40
閱讀 3588·2021-10-12 10:12
閱讀 1895·2021-09-22 15:04
閱讀 2908·2021-09-02 09:53
閱讀 770·2019-08-29 11:03
閱讀 1129·2019-08-28 18:11
閱讀 1731·2019-08-23 15:28
閱讀 3584·2019-08-23 15:05