arduino 与java通信_ardunio+esp8266与javaSocket网络通信(好)
ardunio+esp8266与javaSocket网络通信
功能
通过ardunio向esp8266模块发送at指令,连接上wifi,然后向服务器发送tcp连接请求,之后是与服务器进行sockt通信,实现通过web服务器,更改设备的led开关。
实物连接
连接方式
esp8266连接,ardunio使用软串口RX=2,TX=3,
RX—–ardunio的TX
TX—–ardunio的RX
IO15–GND
CHP_EK—3.3V
RST—-3.3V
IO0—3.3V
IO2 —3.3V
硬件代码
#include
#include
SoftwareSerial mySerial(2, 3); // RX, TX
//发送的数据
String json=”";
//发送数据长度
int sendlength;
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
}
Serial.println(“Goodnight moon!”);
mySerial.begin(115200);
delay(2000);
mySerial.print(“AT+RST\r\n”);
delay(8000);
clearCash();
Serial.println(“rst finish”);
mySerial.print(“AT+CWMODE=3\r\n”);
delay(5000);
clearCash();
Serial.println(“mode finish”);
mySerial.print(“AT+CWJAP=\”wifiname\”,\”wifipassword\”\r\n”);
delay(8000);
clearCash();
Serial.println(“CWJAP finish”);
mySerial.print(“AT+CIPSTART=\”TCP\”,\”192.168.1.144 \”,8888\r\n” );
delay(8000);
clearCash();
json =”{\”id\”:1,\”name\”:\”szh\”}”;
delay(300);
String text1 =”AT+CIPSEND=”;
sendlength =json.length()+2;
text1.concat(String(sendlength));
Serial.println(text1);
delay(300);
mySerial.println(text1);
delay(1000);
clearCash();
Serial.print(“Send String:”);
Serial.println(json);
mySerial.println(json);
delay(1000);
clearCash();
Serial.println(“setup end”);
}
void loop() { // run over and over
String inString=”";
boolean start =false;
mySerial.listen();
while(mySerial.available()){
char inChar = (char)mySerial.read();
Serial.write(inChar);
if(start){
if(inChar == ‘}’){
start =false;
Serial.println(“start false”);
}
if(start){
inString +=(char)inChar;
}
Serial.println(inString);
}
if(inChar == ‘{‘){
start =true;
Serial.println(“start true”);
delay(10);
}
delay(10);
}
if(inString != “”){
Serial.print(“InputString:”);
Serial.println(inString);
if(inString == “off”){
digitalWrite(7, LOW);
json =”{\”state\”:\”off\”}”;
delay(300);
sendResult();
}else if(inString == “on”){
digitalWrite(7, HIGH);
json =”{\”state\”:\”on\”}”;
delay(300);
sendResult();
}else{
json =”{\”state\”:\”error\”}”;
delay(300);
sendResult();
}
inString=”";
}
}
//清空缓存
void clearCash(){
while(mySerial.available()){
mySerial.read();
}
}
//发送结果数据
void sendResult(){
String text1 =”AT+CIPSEND=”;
sendlength =json.length()+2;
text1.concat(String(sendlength));
mySerial.println(text1);
delay(1000);
clearCash();
mySerial.println(json);
delay(1000);
clearCash();
}
注:每一次发送软串口会返回结果,所以需要将这些信息读取掉。通过at指令,会不太稳定,延迟时间可以长一点。与java的通信协议为json数据,往java发数据,可以完整读取,但java发往设备会出现乱码,所以可以将数据长度简单或者重发。
javaWeb代码
web.xml
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=”http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd”
version=”3.1″>
send
com.test.example.SendServlet
send
/send.jsp
com.test.example.SocketListener
服务器启动运行代码
public class SocketListener implements ServletContextListener{
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
new Thread(new Runnable() {
@Override
public void run() {
new SocketServer();
}
}).start();
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
}
}
public class SocketServer {
/**端口号*/
private static final int port = 8888;
/** 线程池*/
private ExecutorService mExecutorService;
/**ServerSocket对象*/
private ServerSocket mServerSocket;
/**存储socket*/
public static Map socketMap =new HashMap<>();
private String ip;
public SocketServer() {
try {
System.out.println(“socket启动”);
//设置socket端口
mServerSocket = new ServerSocket(port);
//创建线程池
mExecutorService = Executors.newCachedThreadPool();
// 用来临时保存客户端连接的Socket对象
Socket client = null;
while(true){
client = mServerSocket.accept();
ip = client.getInetAddress().getHostAddress();
System.out.println(“ip=”+ip);
socketMap.put(“1″,client);
System.out.println(client+”——”);
mExecutorService.execute(convertData);
}
} catch (IOException e) {
e.printStackTrace();
}
}
/**处理数据*/
public Runnable convertData = new Runnable(){
@Override
public void run() {
System.out.println(“convertData”);
int result;
try {
Socket client = socketMap.get(“1″);
while (true) {
InputStream inputStream = client.getInputStream();
OutputStream outputStream =client.getOutputStream();
while(inputStream.available()>0) {
byte[] data = new byte[inputStream.available()];
inputStream.read(data);
String resultData = new String(data);
resultData = replaceBlank(resultData);
System.out.println(“resultData=” + resultData);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
};
/***
*去除空格,水平制表符,换行,回车
* @param str
* @return
*/
public static String replaceBlank(String str) {
String dest = “”;
if (str!=null) {
Pattern p = Pattern.compile(“\\s*|\t|\r|\n”);
Matcher m = p.matcher(str);
dest = m.replaceAll(“”);
}
return dest;
}
}
发送信息代码
public class SendServlet extends HttpServlet{
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Socket client = SocketServer.socketMap.get(“1″);
System.out.println(“client=”+client);
String send =”{off}”;
OutputStream out = client.getOutputStream();
out.write(send.getBytes());
out.flush();
System.out.println(“send finish”);
}
}
———————
作者:poorSir
来源:CSDN
原文:https://blog.csdn.net/qq_31433525/article/details/79123197
版权声明:本文为博主原创文章,转载请附上博文链接!
arduino 与java通信_ardunio+esp8266与javaSocket网络通信(好)相关推荐
- arduino 与java通信_在Java应用程序与Arduino Uno之间建立串口连接
在本篇文章中,我们将主要演示如何在Java应用程序和Arduino Uno之间建立串口连接.本文分为两个部分:在第一部分中,说明了如何从Java应用程序向Arduino发送文本(数字).此外,Ardu ...
- flash java 通信_FLASH与服务器通讯 (JAVA)
1.FLASH 通过URL地址获得服务器数据. 这种方式最为简单,就像在浏览器的地址栏里面敲一样. 先建立一个URLRequest,然后用URLLoader载入就行了. 下面这个是载入一个图片,htm ...
- java与flex通信_Flex与Java通信教程
Flex与Java通信教程 Flex与Java通信框架搭建的步骤: 1. 新建web项目,并启动tomcat运行,检查一切是否正常(必须): 2. 导入所需的jar包(我已给出),将需要用的四个XML ...
- java qq通信_结对博客(Java通信项目QQ)
项目名称:JAVA通信项目--QQ 成员:邢正,郑振兰 项目需求:QQ每个人都用过,它的意义就不再讲了.之所以选择做QQ事因为它有挑战性,涉及到通信.传输.swing等各种知识.(好吧我不装逼了,说的 ...
- Flex与Java通信之HttpService方式
2019独角兽企业重金招聘Python工程师标准>>> Flex用RemoteObject方式与Java通信是最常用的方式,这是一种最直观的方式.当然Flex也可以用HttpServ ...
- Java通信之服务器生猛上手
Java通信之服务器生猛上手 一.生猛上手前的准备 Java其实是一门网络编程语言,这是和C语言和C++语言的一大区别,同时也是Java语言的一大特性:通过简单的Java语言代码就可以让多台计算机之间 ...
- ESP32-Arduino开发实例-与Arduino之间SPI通信
NodeMCU-ESP32与Arduino之间SPI通信 SPI是串行外设接口(Serial Peripheral Interface)的缩写.是 Motorola 公司推出的一种同步串行接口技术,是 ...
- JAVA通信(二)——实现客户机和服务器通信
前面一篇博客我们简单地理清了JAVA创建服务器,以及客户机连接服务器的流程,今天我们继续往下学习,实现客户机和服务器的通信.由于基本概念我们已经在前一篇博客说清楚了,这里我们就不再进行赘述.(不清楚的 ...
- java qq通信,Java通信-仿QQ聊天项目
前后历时一个多月的Java实现聊天通信项目-仿QQ聊天室基本告一段落,期间面对了很多问题,也有不同的解决方案,重写了几次核心代码,等等问题.现在在项目的结束之时,给自己做一个总结,算是一个回顾,算是一 ...
最新文章
- Openstack安装部署
- 集成Lua到你的Android游戏 - 转
- 【Android Studio安装部署系列】八、Android Studio主题皮肤更换
- linux 安装python 3.x,Linux 安装python3.x步骤
- mysql脚本编写与案例_MySQL语句执行顺序和编写顺序实例解析
- Netty 的基本简单实例【服务端-客户端通信】
- Python[8] :paramiko模块多进程批量管理主机
- ICCV2021 | 简单有效的长尾视觉识别新方案:蒸馏自监督(SSD)
- 数字时钟仿真电路设计
- 双光耦开关电源电路图_开关电源电路图及原理讲解
- stm32 IAP 程序编写心得
- 法文 java教学,学习法语的12个技巧?
- <JVM上篇:内存与垃圾回收篇>01-JVM与Java体系结构
- 火灾检测参考资料与数据集
- CHI的Cache Stashing和DVM操作
- 基于YOLOV5的自动瞄准(附代码)
- 在线语音转文字就是这么方便,快点击收藏吧!
- 简述计算机数控系统的工作原理,计算机数控系统复习题-20210321010307.docx-原创力文档...
- 边缘检测之从Sobel、Canny、DoG到XDoG
- 电商积分支付系统构建经验与总结
热门文章
- 用Fiddle进行的简单抓包(需要fiddle ,firefox)
- git的分支管理(详细版)
- Vue通过 Babel 显式转译一个node_modules依赖
- 从社会数据到社会智慧的社会计算:新技术、新哲学、新文科
- 拥抱开源,需要跨越那些鸿沟? ————《Open Life —— 有关开源的哲学》读后感...
- 红米note9pro和荣耀play4tpro 的区别 哪个更值得入手
- sqlserver的TCP/IP 连接失败解决办法
- 用arduino和热敏电阻做电子体温计
- 比尔·盖茨夫妇究竟为何离婚?官宣不想让巴菲特为难|海外头条 - 专栏 - 创业邦
- 用python爬取开放数据