智能花盆(三)

数据库

  • id:varchar(20)nodemcu设备编号
  • ip:varchar(20)nodemcu的ip地址
  • temp:float(5.2)温度
  • humi:float(5.2)湿度

Java Web开发

将对如下的代码文件进行讲解

 

SensorData

对应上面数据库的内容

OperateSql

进行数据库操作

AppRequestData_servlet

app向服务器请求数据时访问的servlet

String id = request.getParameter("id").toString();
SensorData data = OperateSql.queryData(id);
Gson gson = new Gson();
String st = gson.toJson(data);
//System.out.println(st);
		
try(PrintWriter out = new PrintWriter(response.getWriter())){
     out.println(st);
     out.flush();
}

app发送id号给这个servlet,servlet根据唯一的id号查询数据,然后返回给app。

SensorData_servlet

NodeMcu发送数据给这个servlet,同时在这个servlet中更新数据库。

AppControl_servlet

app发送信息给这个servlet来控制NodeMcu

String id = request.getParameter("id").toString();
String flag = request.getParameter("flag").toString();
SensorData data = OperateSql.queryData(id);
String ip = data.getIp();
boolean tick = false;
try {
	Socket client = new Socket(ip, 80);
	client.setSoTimeout(10000);
	//获取Socket的输出流,用来发送数据到服务端  
	try(PrintStream out = new PrintStream(client.getOutputStream());) {
	out.println(flag);
	System.out.println("与设备:"+id+"通信成功");
	tick = true;
	}
	client.close();
			
	}catch(IOException e) {
		System.out.println("与设备:"+id+"通信失败");
	}finally {
		try {
			try(PrintWriter out = new PrintWriter(response.getWriter())){
				if(tick)
					out.println("success");
				else
					out.println("fail");
		        out.flush();
		       }
		}catch(IOException e) {
				
		}
			
	}
}

app发送了id号和一个flag标志给这个servlet,但是我这里只是做了一个简单的控制,所以flag可有可无,只要能触发这个servlet就可以了。

servlet根据接收到的id查询数据库,得到对应设备的ip地址。

然后和NodeMcu间建立一个socket链接,发送flag过去,同样能触发NodeMcu的端口监听就行。

对于此项目,我们必须包含一组需要包含的组件:BME280,Seeed Grove灰尘传感器,Seeed Grove空气质量v1.3传感器,电容性土壤湿度传感器,Adafruit 128x64 OLED显示屏,继电器和一个粒子氩。 对于我的设计,我想要一个看起来干净且精致的设置。我本来想把一个盒子和一个花盆放在一个水箱上,但最终将其改为放在丙烯酸圆盘上的所有东西。对于盒子,我在Autodesk Fusion 360中对它和盖子建模,并使用Formlabs 3 Resin打印机将它们打印出来。对于花盆i,我也曾在Fusion 360中对其进行建模,并使用Ultimaker 3 3D打印机将其打印出来。对于水库本身,我使用了刚好适合该项目的剩余丙烯酸光盘。 该项目的目标是要有一个可以通过网络控制的整洁的自动浇水花盆。完成大约8个小时的工作就完成了,但是实际打印所有内容都花费了更长的时间。锅用了大约23个小时,盒子在树脂打印机上用了3个小时,而储藏室用了大约2个小时使其干燥。 BME280与土壤湿度传感器一起安装在花盆内。粒子通过继电器安装在盒子内,显示屏拧紧在外壳上,电动机安装在储水箱内,空气质量传感器和灰尘传感器一起热粘在外壳的盖子上。 对于这种情况,我想要一个易于使用的粒子氩气口,一个易于拆卸但也可以固定的盖子,允许所有电线通过的直通孔,继电器安装在面包板上方以及灰尘传感器/空气质量传感器都安装在盖子上,以便能够更准确地读取空气。 对于水库,我最初希望将盒子和花盆都安装在其顶部,直径约6英寸。由于材料的使用,这种情况发生了变化,我发现直径为4.5英寸的丙烯酸光盘正被某人使用。我将其更改为双面粘贴到直径9英寸的较大的丙烯酸圆盘上,并将4.5英寸的圆圈粘在一起。虽然我曾经使用硅树脂,但是决定不给丙烯酸树脂提供必要的附着力,所以我最终使用了汽车RTV,该技术可以实现水密密封,并且能够有效地将每一块胶粘在一起。 对于花盆,我希望供水来自侧面,带有一个小尖头,可以使水更均匀地分配给土壤湿度传感器,以更准确地读取土壤。我在锅中钻了两个孔,一个用于土壤传感器的电线,另一个用于连接软管。我将电线和连接器热粘合在一起,希望能形成水密密封,但最终不得不使用浴室硅胶密封它们,以免它们泄漏!
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值