1. 項(xiàng)目背景
“民以食為天”,糧食安全關(guān)系一個(gè)國家和民族的基本生存,聯(lián)合國發(fā)布《2022年全球糧食危機(jī)報(bào)告》稱全球或面臨嚴(yán)重的糧食短缺。糧食生產(chǎn)離不開澆水和施肥,要想獲得高產(chǎn)穩(wěn)產(chǎn),必須采用更加科學(xué)高效的節(jié)水灌溉技術(shù),實(shí)現(xiàn)水肥一體化作業(yè)和管理。噴灌是利用管道將有壓水送到灌溉地段,并通過噴頭分散成細(xì)小水滴,均勻地噴灑到田間,對(duì)作物進(jìn)行灌溉。它作為一種先進(jìn)的機(jī)械化、半機(jī)械化灌水方式,可以廣泛應(yīng)用于大田糧食生產(chǎn)。
噴灌的主要優(yōu)點(diǎn)有:
-
節(jié)水效果顯著,水的利用率可達(dá)90%。噴灌與地面灌溉相比,1立方米水可以當(dāng)2立方米水用。
-
作物增產(chǎn)幅度大,一般可達(dá)20%—40%,因增加了15%—20%的播種面積;可改善了田間小氣候和農(nóng)業(yè)生態(tài)環(huán)境。
-
大大減少了田間渠系建設(shè)及管理維護(hù)和平整土地等的工作量。
-
減少了農(nóng)民用于灌水的費(fèi)用和用工量,減少生產(chǎn)投入,增加農(nóng)民收入。
-
有利于實(shí)現(xiàn)農(nóng)業(yè)機(jī)械化、自動(dòng)化,產(chǎn)業(yè)化、現(xiàn)代化。
-
避免由于過量灌溉造成水資源浪費(fèi)和土壤次生鹽堿化。
演示系統(tǒng)由水泵,三叉噴頭,支架,管路,變頻器,Hi3861開發(fā)板和DAYU200開發(fā)板共同組成。
最終效果如下:
在庭院中的演示視頻如下:https://ost.51cto.com/show/14689
代碼倉庫:https://gitee.com/hihope_iot/dayu200_demo/tree/master/%23DAYU200%E4%BD%93%E9%AA%8C%E5%AE%98%23%E5%86%9C%E4%B8%9A%E5%96%B7%E7%81%8C%E7%9A%84%E5%8F%AF%E8%A7%86%E5%8C%96%E6%8E%A7%E5%88%B6
3. 上位機(jī)-DAYU200首頁界面,點(diǎn)擊“開始”按鈕進(jìn)控制頁面。
可視化控制頁面,點(diǎn)擊“啟動(dòng)”和“停止”可以開啟和關(guān)閉噴灌系統(tǒng)。
DAYU200與主控Hi3861通過Socket進(jìn)行數(shù)據(jù)傳輸,采用TCP協(xié)議。
//import需要的socket模塊
import socket from '@ohos.net.socket';
//創(chuàng)建一個(gè)TCPSocket連接,返回一個(gè)TCPSocket對(duì)象
let tcp = socket.constructTCPSocketInstance();
//訂閱TCPSocket相關(guān)的事件
tcp.on('message', value => {
console.log("on message")
let buffer = value.message
let dataView = new DataView(buffer)
let str = ""
for (let i = 0;i < dataView.byteLength; ++i) {
str += String.fromCharCode(dataView.getUint8(i))
}
console.log("***on connect received:" + str)
this.receive_data=str;
});
tcp.on('connect', () => {
console.log("***on connect");
this.llog="on.con ok";
});
tcp.on('close', () => {
console.log("***on close");
this.llog="on.close ok";
});
//綁定本機(jī)IP地址和指定的端口,端口使用中也會(huì)由系統(tǒng)隨機(jī)分配
let bindAddress = {
address: '192.168.*.*',
port: 1234,
family: 1
};
tcp.bind(bindAddress, err => {
if (err) {
console.log('***bind fail');
return;
}
console.log('***bind success');
this.llog="bind ok";
});
//連接到主控3861的IP地址和端口
tcp.connect({ address: {address: '192.168.*.*', port: 8888, family: 1} , timeout: 6000}, err => {
if (err) {
console.log('***connect fail');
return;
}
console.log('***connect success');
});
//向3861發(fā)送啟動(dòng)指令
this.app_msg = "ON";
tcp.send({
data: this.app_msg,
}, err => {
if (err) {
console.log('send fail');
return;
}
});
//向3861發(fā)送停止指令
this.app_msg = 'OFF';
tcp.send({
data: this.app_msg,
}, err => {
if (err) {
console.log('send fail');
return;
}
});
4.主控-Hi3861主控-Hi3861使用socket創(chuàng)建TCP服務(wù)端,接收來自上位機(jī)DAYU200的控制命令,同時(shí)回復(fù)狀態(tài)數(shù)據(jù)到DAYU200。
static void TCPServerTask(void)
{
//服務(wù)端地址信息
struct sockaddr_in server_sock;
//客戶端地址信息
struct sockaddr_in client_sock;
int sin_size;
struct sockaddr_in *cli_addr;
//連接Wifi,
WifiConnect("******", "********");
//創(chuàng)建socket
if ((sock_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
perror("socket is error
");
exit(1);
}
bzero(&server_sock, sizeof(server_sock));
server_sock.sin_family = AF_INET;
server_sock.sin_addr.s_addr = htonl(INADDR_ANY);
server_sock.sin_port = htons(_PROT_);
//調(diào)用bind函數(shù)綁定socket和地址
if (bind(sock_fd, (struct sockaddr *)&server_sock, sizeof(struct sockaddr)) == -1)
{
perror("bind is error
");
exit(1);
}
//調(diào)用listen函數(shù)監(jiān)聽(指定port監(jiān)聽)
if (listen(sock_fd, TCP_BACKLOG) == -1)
{
perror("listen is error
");
exit(1);
}
printf("start accept
");
//調(diào)用accept函數(shù)從隊(duì)列中
while (1)
{
sin_size = sizeof(struct sockaddr_in);
if ((new_fd = accept(sock_fd, (struct sockaddr *)&client_sock, (socklen_t *)&sin_size)) == -1)
{
perror("accept");
continue;
}
cli_addr = malloc(sizeof(struct sockaddr));
printf("accept addr
");
if (cli_addr != NULL)
{
memcpy(cli_addr, &client_sock, sizeof(struct sockaddr));
}
//處理目標(biāo)
ssize_t ret;
while (1)
{
if ((ret = recv(new_fd, recvbuf, sizeof(recvbuf), 0)) == -1)
{
printf("recv error
");
}
if(NULL != strstr(recvbuf,"ON")) {
printf("START ON !
");
IoTGpioSetOutputVal(8, 1);
IoTGpioSetOutputVal(14, 1);
}
if(NULL != strstr(recvbuf,"OFF")) {
printf("START OFF !
");
IoTGpioSetOutputVal(8, 0);
IoTGpioSetOutputVal(14, 0);
}
if ((ret = send(new_fd, buf, strlen(buf) + 1, 0)) == -1)
{
perror("send : ");
}
sleep(1);
}
close(new_fd);
}
}
開發(fā)環(huán)境-
DevEco Studio for OpenHarmony3.0.0.900
-
OH系統(tǒng)版本:OpenHarmony 3.2.3.3
-
上位機(jī)開發(fā)語言:ETS
-
DevEco Device Tool V3.0 Release
-
開發(fā)板:DAYU200,BEAIPI-HM-Nano
“水利是農(nóng)業(yè)的命脈”,2022年2月22日,《中共中央國務(wù)院關(guān)于做好2022年全面推進(jìn)鄉(xiāng)村振興重點(diǎn)工作的意見》發(fā)布,2022年將建設(shè)高標(biāo)準(zhǔn)農(nóng)田1億畝,累計(jì)建成高效節(jié)水灌溉面積4億畝。統(tǒng)籌規(guī)劃、同步實(shí)施高效節(jié)水灌溉與高標(biāo)準(zhǔn)農(nóng)田建設(shè)。
相信OpenHarmony及相關(guān)輕富設(shè)備會(huì)在鄉(xiāng)村振興的大趨勢(shì)中發(fā)揮舉足輕重的作用。
本文完寫在最后我們最近正帶著大家玩嗨OpenHarmony。如果你有好玩的東東,歡迎投稿,讓我們一起嗨起來!有點(diǎn)子,有想法,有Demo,立刻聯(lián)系我們:合作郵箱:zzliang@atomsource.org
原文標(biāo)題:玩嗨OpenHarmony:基于OpenHarmony的農(nóng)業(yè)噴灌的可視化控制系統(tǒng)
文章出處:【微信公眾號(hào):開源技術(shù)服務(wù)中心】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
開源技術(shù)
+關(guān)注
關(guān)注
0文章
389瀏覽量
7975 -
OpenHarmony
+關(guān)注
關(guān)注
25文章
3731瀏覽量
16434
原文標(biāo)題:玩嗨OpenHarmony:基于OpenHarmony的農(nóng)業(yè)噴灌的可視化控制系統(tǒng)
文章出處:【微信號(hào):開源技術(shù)服務(wù)中心,微信公眾號(hào):共熵服務(wù)中心】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論