arduino与esp8266结合制作氛围灯(四)

最后监听端口并传到连接数据库的java代码

package com;import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.ServerSocket;
import java.net.Socket;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;public class test {public static void main(String args[]) throws IOException {Connection conn = null; Statement stat = null; PreparedStatement ps=null; //为了简单起见,所有的异常信息都往外抛int port = 702;//定义一个ServerSocket监听在端口上ServerSocket server = new ServerSocket(port);System.out.println("start");//server尝试接收其他Socket的连接请求,server的accept方法是阻塞式的Socket socket = server.accept();//跟客户端建立好连接之后,我们就可以获取socket的InputStream,并从中读取客户端发过来的信息了。Reader reader = new InputStreamReader(socket.getInputStream());//char chars[] = new char[60]; int len;int k=1;StringBuilder sb = new StringBuilder();while (k>0 ) {char chars[] = new char[60]; len=reader.read(chars);//sb.append(new String(chars, 0, len)); //reader.read(chars);//k+=2;//System.out.println("from client: " + sb);String s[] = new String[2];s[0] = new String();s[1] = new String();int d=0;for(int i=0;i

我的arduino代码,我用的是超声波测距,然后把数据上传服务器

#include 
unsigned int EchoPin = 2;
unsigned int TrigPin = 3;
unsigned int ledPin = 4;
unsigned int ledPin2 = 5;
unsigned long Time_Echo_us = 0;
//Len_mm_X100 = length*100
unsigned long Len_mm_X100  = 0;
unsigned long Len_Integer = 0; 
int k=0;
//unsigned int Len_Fraction = 0;
SoftwareSerial mySerial(13, 12); // RX, TX  通过软串口连接esp8266void setup() {// Open serial communications and wait for port to open:Serial.begin(9600);pinMode(EchoPin, INPUT);pinMode(TrigPin, OUTPUT);pinMode(ledPin, OUTPUT);pinMode(ledPin2, OUTPUT);while (!Serial) {; // wait for serial port to connect. Needed for native USB port only}mySerial.begin(9600);mySerial.println("AT+RST");   // 初始化重启一次esp8266delay(1500);echo();mySerial.println("AT");echo();delay(500);mySerial.println("AT+CWMODE=1");  // 设置Wi-Fi模式echo();mySerial.println("AT+CWJAP=\"test\",\"12345678\"");  // 连接Wi-Fiecho();delay(10000);
}void loop() {if (mySerial.available()) {Serial.write(mySerial.read());}if (Serial.available()) {mySerial.write(Serial.read());}post();
}void echo(){delay(50);while (mySerial.available()) {Serial.write(mySerial.read());}
}void cj(){k=k+1;digitalWrite(TrigPin, HIGH);delayMicroseconds(50);digitalWrite(TrigPin, LOW);Time_Echo_us = pulseIn(EchoPin, HIGH);if((Time_Echo_us < 60000) && (Time_Echo_us > 1)){Len_mm_X100 = (Time_Echo_us*34)/2;Len_Integer = Len_mm_X100/100;if(Len_Integer > 100){digitalWrite(ledPin, HIGH); digitalWrite(ledPin2, LOW);delay(1000); //延时1 秒}if(Len_Integer <= 100){digitalWrite(ledPin2, HIGH); digitalWrite(ledPin, LOW); delay(1000); //延时1 秒}}
}void post(){cj();int temp = Len_Integer;int i=k;mySerial.println("AT+CIPMODE=1");echo();//mySerial.println("AT+CIPSTART=\"TCP\",\"192.168.91.1\",80");  // 连接服务器的80端口//mySerial.println("AT+CIPSTART=\"TCP\",\"192.168.43.26\",80");  // 连接服务器的80端口mySerial.println("AT+CIPSTART=\"TCP\",\"你的服务器ip\",702");  // 连接服务器的80端口delay(1000);echo();mySerial.println("AT+CIPSEND"); // 进入TCP透传模式,接下来发送的所有消息都会发送给服务器echo();// mySerial.print("POST /服务器ip"); // 开始发送post请求// mySerial.print(" HTTP/1.1\r\nHost: 服务器ip\r\nUser-Agent: arduino-ethernet\r\nConnection:close\r\nContent-Length:"); // post请求的报文格式// mySerial.print(temp.length()); // 需要计算post请求的数据长度// mySerial.print("\r\n\r\n"); mySerial.print(temp);mySerial.print(" ");mySerial.print(i);// 结束post请求delay(3000);echo();mySerial.print("+++"); // 退出tcp透传模式,用println会出错delay(2000);
}

MySQL数据库我就整了一个表,三个数据,一个id是主键,一个是距离,还有一个是发送的编号bh,你们数据库可以自己搞。

然后Java代码的意思就是,监听端口,然后收到char串,然后我传输一个数据就带一个空格,这样好提取。。

 

 

然后我的总体思路就是:

我的arduino uno r3的作用就是一个工具人,它负责收集传感器数据,担任软串口的责任,为esp8266供电,总之就是工具人。。。

esp8266是主角,与服务器通讯和连接WiFi,都是用的它自带的AT命令。

然后我Java代码的作用就是监听端口并存入数据库数据。为了减轻将来jsp的压力,所以我选择了本地Java直接完成这些操作。

jsp代码的作用就是调用数据库,完成一些可视化数据界面。

 

 

就是这样,


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部