#DAYU200体验官#农业喷灌的可视化控制 原创 精华

鸿联
发布于 2022-7-6 22:22
浏览
2收藏

背景

“民以食为天”,粮食安全关系一个国家和民族的基本生存,联合国发布《2022年全球粮食危机报告》称全球或面临严重的粮食短缺。粮食生产离不开浇水和施肥,要想获得高产稳产,必须采用更加科学高效的节水灌溉技术,实现水肥一体化作业和管理。喷灌是利用管道将有压水送到灌溉地段,并通过喷头分散成细小水滴,均匀地喷洒到田间,对作物进行灌溉。它作为一种先进的机械化、半机械化灌水方式,可以广泛应用于大田粮食生产。
喷灌的主要优点有:
⑴节水效果显著,水的利用率可达90%。喷灌与地面灌溉相比,1立方米水可以当2立方米水用。
⑵作物增产幅度大,一般可达20%—40%,因增加了15%—20%的播种面积;可改善了田间小气候和农业生态环境。
⑶大大减少了田间渠系建设及管理维护和平整土地等的工作量。
⑷减少了农民用于灌水的费用和用工量,减少生产投入,增加农民收入。
⑸有利于实现农业机械化、自动化,产业化、现代化。
⑹避免由于过量灌溉造成水资源浪费和土壤次生盐碱化。

概况

农业喷灌项目采用变频器驱动高效深井泵实现输水管道的恒压和变压控制,用Hi3861承担主控,采用DAYU200做上位机,完成系统的可视化控制。
#DAYU200体验官#农业喷灌的可视化控制-鸿蒙开发者社区

开发环境

DevEco Studio for OpenHarmony3.0.0.900
OH系统版本:OpenHarmony 3.2.3.3
上位机开发语言: ETS
DevEco Device Tool V3.0 Release
开发板:DAYU200,BEAIPI-HM-Nano

主控-Hi3861

主控-Hi3861使用socket创建TCP服务端,接收来自上位机DAYU200的控制命令,同时回复状态数据到DAYU200。

static void TCPServerTask(void)
{
	//服务端地址信息
	struct sockaddr_in server_sock;
	//客户端地址信息
	struct sockaddr_in client_sock;
	int sin_size;
	struct sockaddr_in *cli_addr;
	//连接Wifi,
	WifiConnect("******", "********");
	//创建socket
	if ((sock_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
	{
		perror("socket is error\r\n");
		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_);
	//调用bind函数绑定socket和地址
	if (bind(sock_fd, (struct sockaddr *)&server_sock, sizeof(struct sockaddr)) == -1)
	{
		perror("bind is error\r\n");
		exit(1);
	}
	//调用listen函数监听(指定port监听)
	if (listen(sock_fd, TCP_BACKLOG) == -1)
	{
		perror("listen is error\r\n");
		exit(1);
	}
	printf("start accept\n");
	//调用accept函数从队列中
	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\r\n");
		if (cli_addr != NULL)
		{
			memcpy(cli_addr, &client_sock, sizeof(struct sockaddr));
		}
		//处理目标
		ssize_t ret;
		while (1)
		{
			if ((ret = recv(new_fd, recvbuf, sizeof(recvbuf), 0)) == -1)
			{
				printf("recv error \r\n");
			}
			if(NULL != strstr(recvbuf,"ON")) {
			    printf("START ON  !\r\n");
				IoTGpioSetOutputVal(8, 1);
			    IoTGpioSetOutputVal(14, 1);
			}
	        if(NULL != strstr(recvbuf,"OFF")) {
				printf("START OFF !\r\n");
				IoTGpioSetOutputVal(8, 0);
			    IoTGpioSetOutputVal(14, 0);
			}
			if ((ret = send(new_fd, buf, strlen(buf) + 1, 0)) == -1)
			{
				perror("send : ");
			}
			sleep(1);
		}
		close(new_fd);
	}
}

上位机-DAYU200

  1. 首页界面,点击“开始”按钮进控制页面
    #DAYU200体验官#农业喷灌的可视化控制-鸿蒙开发者社区
    2.可视化控制页面,点击“启动”和“停止”可以开启和关闭喷灌系统。
    #DAYU200体验官#农业喷灌的可视化控制-鸿蒙开发者社区
    #DAYU200体验官#农业喷灌的可视化控制-鸿蒙开发者社区
    3.1. DAYU200与主控Hi3861通过Socket进行数据传输,采用TCP协议
//import需要的socket模块
import socket from '@ohos.net.socket';
//创建一个TCPSocket连接,返回一个TCPSocket对象
let tcp = socket.constructTCPSocketInstance();
//订阅TCPSocket相关的事件
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";
    });
//绑定本机IP地址和指定的端口,端口使用中也会由系统随机分配
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发送启动指令
this.app_msg = "ON";
    tcp.send({
      data: this.app_msg,
    }, err => {
      if (err) {
        console.log('send fail');
        return;
      }
    });

//向3861发送停止指令
this.app_msg = 'OFF';
    tcp.send({
      data: this.app_msg,
    }, err => {
      if (err) {
        console.log('send fail');
        return;
      }
    });

演示系统

1.演示系统由水泵,三叉喷头,支架,管路,变频器,Hi3861开发板和DAYU200开发板共同组成。
#DAYU200体验官#农业喷灌的可视化控制-鸿蒙开发者社区
#DAYU200体验官#农业喷灌的可视化控制-鸿蒙开发者社区
#DAYU200体验官#农业喷灌的可视化控制-鸿蒙开发者社区

2.在庭院中的演示: 农业喷灌可视化控制视频
3.在大田作物玉米地的应用: 农业喷灌的可视化控制-大田应用
4.代码仓库

展望

“水利是农业的命脉”,2022年2月22日,《中共中央国务院关于做好2022年全面推进乡村振兴重点工作的意见》发布,2022年将建设高标准农田1亿亩,累计建成高效节水灌溉面积4亿亩。统筹规划、同步实施高效节水灌溉与高标准农田建设。
相信OpenHarmony及相关轻富设备会在乡村振兴的大趋势中发挥举足轻重的作用。

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
已于2022-7-27 05:48:59修改
6
收藏 2
回复
举报
5条回复
按时间正序
/
按时间倒序
红叶亦知秋
红叶亦知秋

楼主的视频链接我先贴一下:https://ost.51cto.com/show/14436

回复
2022-7-7 10:09:41
Tuer白晓明
Tuer白晓明

👍👍👍👍👍

回复
2022-7-7 12:15:28
致良知aka
致良知aka

3861开发板跟变频器怎么通信的

回复
2023-2-20 09:18:19
鸿联
鸿联

直接控制的

回复
2023-2-23 07:34:52
wx655b0f5251706
wx655b0f5251706

您好,我根据您的3861的代码试了一下,我没有从底层找到IoTGpioSetOutputVal的接口定义

回复
2023-12-11 15:54:37
回复
    相关推荐