系列文章目录
第一章ESP8266的java软件仿真测试
第二章ESP8266硬件与软件测试
第三章ESP8266客户端与Java后台服务器联调
第四章ESP8266客户端与JavaWeb服务器联调
前言
daodanjishui物联网核心原创技术之物联网监控系统设计
一、要实现的功能是什么?
对于上一章(第三章)而言,STM32F103C8T6用串口AT指令控制ESP8266作为客户端上传DHT11温湿度给私人java服务器(后台),这时候的ESP8266是作为客户端跟服务器的链接是TCP/IP长链接的,非常占用资源,对JAVAWEB开发不是很合适。JAVAWEB部署的网站用裸代码硬开发只需要使用Servlet且不需要套框架,servlet的生命期很短暂,响应完客户端提交的get或者是post请求就结束了,占用资源少响应速度快,值得提倡,缺点就是只能是服务端响应客户端的请求,反过来不行,如果使用websocket技术则可以解决该问题,这个问题以后再出一章来解决。
本文只介绍:让ESP8266作为客户端发送get请求和post请求,jsp服务器接收到请求之后在控制台打印出来,系统运行流畅掉线重连。
代码截图如下:
硬件构成如下图所示:
二、使用步骤
1.下载源码
源码和教程下载的地址:https://gf.bilibili.com/item/detail/1107634114
直接跳转过去
服务器代码如下(示例):
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
-
Servlet implementation class ChatServlet
*/
@WebServlet(“/ChatServlet”)
public class ChatServlet extends HttpServlet {
private static final long serialVersionUID = 1L;/**
- @see HttpServlet#HttpServlet()
*/
public ChatServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
- @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println(“进入doGet方法,响应get请求”);
response.setContentType(“text/html;charset=UTF-8”);//设置响应内容和编码方式
String user=request.getParameter(“signname”);//昵称
System.out.println(user);
}
/**
- @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println(“进入doPost方法,响应post请求”);
response.setContentType(“text/html;charset=UTF-8”);//设置响应内容和编码方式
String user=request.getParameter(“user”);//昵称
String speak=request.getParameter(“speak”);//说话内容
System.out.println(user+“say:”+speak);
}
- @see HttpServlet#HttpServlet()
}
2.读入数据
客户端部分代码如下:
if( Read_DHT11(&DHT11_Data)==SUCCESS)
{
printf(“\r\n读取DHT11成功!\r\n\r\n湿度为%d.%d %RH ,温度为 %d.%d℃ \r\n”,
DHT11_Data.humi_int,DHT11_Data.humi_deci,DHT11_Data.temp_int,DHT11_Data.temp_deci);
//printf(“\r\n 湿度:%d,温度:%d \r\n” ,DHT11_Data.humi_int,DHT11_Data.temp_int);
//sprintf((char*)p,“\r\n读取DHT11成功!\r\n\r\n湿度为%d.%d %RH ,温度为 %d.%d℃ \r\n”,
DHT11_Data.humi_int,DHT11_Data.humi_deci,DHT11_Data.temp_int,DHT11_Data.temp_deci);
//sprintf((char*)p,“hello,Temperature=%d.%d’C ,Humidity=%d.%d RH\r\n”,DHT11_Data.temp_int,DHT11_Data.temp_deci,DHT11_Data.humi_int,DHT11_Data.humi_deci);//返回温湿度给服务器
//sprintf((char*)p,“GET http://192.168.253.1:8080/test_TCP/ChatServlet?action=getMessages&signname=%d.%d %RH HTTP/1.1\r\nHost:192.168.253.1:8080\r\nConnection: keep-alive\r\n\r\n”,DHT11_Data.humi_int,DHT11_Data.humi_deci);//测试数据
//sprintf((char*)p,"GET http://192.168.253.1:8080/test_TCP/ChatServlet?action=getMessages&signname=%d HTTP/1.1\r\nHost:192.168.253.1:8080\r\nConnection: keep-alive\r\n\r\n",DHT11_Data.humi_int);//测试数据
//sprintf((char*)p,"POST http://192.168.253.1:8080/test_TCP/ChatServlet?action=sendMessage&user=Robot1&speak=Humidity:%d.%dRH---Temperature:%d.%d'C HTTP/1.1\r\nHost:192.168.253.1:8080\r\nConnection: keep-alive\r\n\r\n",DHT11_Data.humi_int,DHT11_Data.humi_deci,DHT11_Data.temp_int,DHT11_Data.temp_deci);//测试数据
sprintf((char*)p,"GET http://192.168.253.1:8080/test_TCP/ChatServlet?signname=%d HTTP/1.1\r\nHost:192.168.253.1:8080\r\nConnection: keep-alive\r\n\r\n",DHT11_Data.humi_int);//测试数据
//sprintf((char*)p,"POST http://192.168.253.1:8080/test_TCP/ChatServlet?action=sendMessage&user=Robot1&speak=Humidity:%d.%dRH---Temperature:%d.%d'C HTTP/1.1\r\nHost:192.168.253.1:8080\r\nConnection: keep-alive\r\n\r\n",DHT11_Data.humi_int,DHT11_Data.humi_deci,DHT11_Data.temp_int,DHT11_Data.temp_deci);//测试数据
}
else
{
printf("Read DHT11 ERROR!\r\n");
sprintf((char*)p,"hello,T=0 ,H=0\r\n");//返回温湿度给服务器
}
串口调试显示效果如下
服务器打印如下:
总结
STM32库函数版本用串口AT指令控制ESP8266作为客户端发送get请求和post请求提交DHT11采集的温湿度数据给jsp服务器,jsp服务器接收到请求之后在控制台打印出来,系统运行流畅掉线重连。