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网络通信(好)相关推荐

  1. arduino 与java通信_在Java应用程序与Arduino Uno之间建立串口连接

    在本篇文章中,我们将主要演示如何在Java应用程序和Arduino Uno之间建立串口连接.本文分为两个部分:在第一部分中,说明了如何从Java应用程序向Arduino发送文本(数字).此外,Ardu ...

  2. flash java 通信_FLASH与服务器通讯 (JAVA)

    1.FLASH 通过URL地址获得服务器数据. 这种方式最为简单,就像在浏览器的地址栏里面敲一样. 先建立一个URLRequest,然后用URLLoader载入就行了. 下面这个是载入一个图片,htm ...

  3. java与flex通信_Flex与Java通信教程

    Flex与Java通信教程 Flex与Java通信框架搭建的步骤: 1. 新建web项目,并启动tomcat运行,检查一切是否正常(必须): 2. 导入所需的jar包(我已给出),将需要用的四个XML ...

  4. java qq通信_结对博客(Java通信项目QQ)

    项目名称:JAVA通信项目--QQ 成员:邢正,郑振兰 项目需求:QQ每个人都用过,它的意义就不再讲了.之所以选择做QQ事因为它有挑战性,涉及到通信.传输.swing等各种知识.(好吧我不装逼了,说的 ...

  5. Flex与Java通信之HttpService方式

    2019独角兽企业重金招聘Python工程师标准>>> Flex用RemoteObject方式与Java通信是最常用的方式,这是一种最直观的方式.当然Flex也可以用HttpServ ...

  6. Java通信之服务器生猛上手

    Java通信之服务器生猛上手 一.生猛上手前的准备 Java其实是一门网络编程语言,这是和C语言和C++语言的一大区别,同时也是Java语言的一大特性:通过简单的Java语言代码就可以让多台计算机之间 ...

  7. ESP32-Arduino开发实例-与Arduino之间SPI通信

    NodeMCU-ESP32与Arduino之间SPI通信 SPI是串行外设接口(Serial Peripheral Interface)的缩写.是 Motorola 公司推出的一种同步串行接口技术,是 ...

  8. JAVA通信(二)——实现客户机和服务器通信

    前面一篇博客我们简单地理清了JAVA创建服务器,以及客户机连接服务器的流程,今天我们继续往下学习,实现客户机和服务器的通信.由于基本概念我们已经在前一篇博客说清楚了,这里我们就不再进行赘述.(不清楚的 ...

  9. java qq通信,Java通信-仿QQ聊天项目

    前后历时一个多月的Java实现聊天通信项目-仿QQ聊天室基本告一段落,期间面对了很多问题,也有不同的解决方案,重写了几次核心代码,等等问题.现在在项目的结束之时,给自己做一个总结,算是一个回顾,算是一 ...

最新文章

  1. Openstack安装部署
  2. 集成Lua到你的Android游戏 - 转
  3. 【Android Studio安装部署系列】八、Android Studio主题皮肤更换
  4. linux 安装python 3.x,Linux 安装python3.x步骤
  5. mysql脚本编写与案例_MySQL语句执行顺序和编写顺序实例解析
  6. Netty 的基本简单实例【服务端-客户端通信】
  7. Python[8] :paramiko模块多进程批量管理主机
  8. ICCV2021 | 简单有效的长尾视觉识别新方案:蒸馏自监督(SSD)
  9. 数字时钟仿真电路设计
  10. 双光耦开关电源电路图_开关电源电路图及原理讲解
  11. stm32 IAP 程序编写心得
  12. 法文 java教学,学习法语的12个技巧?
  13. <JVM上篇:内存与垃圾回收篇>01-JVM与Java体系结构
  14. 火灾检测参考资料与数据集
  15. CHI的Cache Stashing和DVM操作
  16. 基于YOLOV5的自动瞄准(附代码)
  17. 在线语音转文字就是这么方便,快点击收藏吧!
  18. 简述计算机数控系统的工作原理,计算机数控系统复习题-20210321010307.docx-原创力文档...
  19. 边缘检测之从Sobel、Canny、DoG到XDoG
  20. 电商积分支付系统构建经验与总结

热门文章

  1. 用Fiddle进行的简单抓包(需要fiddle ,firefox)
  2. git的分支管理(详细版)
  3. Vue通过 Babel 显式转译一个node_modules依赖
  4. 从社会数据到社会智慧的社会计算:新技术、新哲学、新文科
  5. 拥抱开源,需要跨越那些鸿沟? ————《Open Life —— 有关开源的哲学》读后感...
  6. 红米note9pro和荣耀play4tpro 的区别 哪个更值得入手
  7. sqlserver的TCP/IP 连接失败解决办法
  8. 用arduino和热敏电阻做电子体温计
  9. 比尔·盖茨夫妇究竟为何离婚?官宣不想让巴菲特为难|海外头条 - 专栏 - 创业邦
  10. 用python爬取开放数据