如何搭建服务器实现Arduino传感器数据传输至Java应用(已购GoDaddy域名)
实现Arduino传感器数据上传到服务器并在Java应用中使用的完整流程
一、服务器端配置(基于你的GoDaddy域名)
绑定域名与部署环境
- 登录GoDaddy后台,将域名的A记录指向你的云服务器/VPS公网IP;如果用GoDaddy自带的托管主机,直接在控制面板开启PHP/Python运行环境。
- 服务器端需要部署一个接收数据的后端接口,同时准备SQLite数据库文件(直接放在服务器可访问的目录下即可)。
编写数据接收接口(Python Flask示例)
这个接口负责接收Arduino发来的数据并写入SQLite:from flask import Flask, request import sqlite3 app = Flask(__name__) # 初始化SQLite表结构 def init_sqlite(): conn = sqlite3.connect('sensor_data.db') cursor = conn.cursor() cursor.execute('''CREATE TABLE IF NOT EXISTS sensor_log (id INTEGER PRIMARY KEY AUTOINCREMENT, sensor_val REAL, record_time DATETIME DEFAULT CURRENT_TIMESTAMP)''') conn.commit() conn.close() @app.route('/save-sensor-data', methods=['POST']) def save_data(): data = request.form.get('val') if not data: return "Missing sensor data", 400 try: conn = sqlite3.connect('sensor_data.db') cursor = conn.cursor() cursor.execute("INSERT INTO sensor_log (sensor_val) VALUES (?)", (float(data),)) conn.commit() conn.close() return "Data saved", 200 except Exception as e: return f"Save failed: {str(e)}", 500 if __name__ == '__main__': init_sqlite() app.run(host='0.0.0.0', port=80)部署后确保接口能通过域名访问(比如
http://你的域名/save-sensor-data)。
二、Arduino端数据上传代码
以ESP8266 WiFi模块为例,实现传感器数据读取与上传:
#include <ESP8266WiFi.h> #include <WiFiClient.h> const char* WIFI_SSID = "你的WiFi名称"; const char* WIFI_PWD = "你的WiFi密码"; const char* DOMAIN = "你的GoDaddy域名"; const int PORT = 80; WiFiClient client; void setup() { Serial.begin(115200); WiFi.begin(WIFI_SSID, WIFI_PWD); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println("\nWiFi connected"); } void loop() { // 读取传感器数据(这里用模拟引脚示例,替换成你的传感器逻辑) float sensorValue = analogRead(A0) * (5.0 / 1023.0); if (client.connect(DOMAIN, PORT)) { String postContent = "val=" + String(sensorValue); // 发送POST请求 client.println("POST /save-sensor-data HTTP/1.1"); client.println("Host: " + String(DOMAIN)); client.println("Content-Type: application/x-www-form-urlencoded"); client.println("Content-Length: " + String(postContent.length())); client.println(); client.println(postContent); // 读取服务器响应 delay(100); while (client.available()) { String respLine = client.readStringUntil('\r'); Serial.println(respLine); } client.stop(); } else { Serial.println("Connection to server failed"); } delay(5000); // 每5秒上传一次 }
三、Java应用读取数据
因为SQLite是文件型数据库,不建议Java直接远程访问服务器上的数据库文件,推荐在服务器新增一个查询接口,Java通过HTTP请求获取数据:
1. 服务器新增查询接口(Flask扩展)
@app.route('/get-sensor-data', methods=['GET']) def get_data(): conn = sqlite3.connect('sensor_data.db') cursor = conn.cursor() cursor.execute("SELECT * FROM sensor_log ORDER BY record_time DESC LIMIT 10") rows = cursor.fetchall() conn.close() # 转成JSON返回 import json return json.dumps([{"id": r[0], "value": r[1], "time": r[2]} for r in rows])
2. Java请求数据代码
import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; public class SensorDataFetcher { public static void main(String[] args) { try { URL url = new URL("http://你的域名/get-sensor-data"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line; StringBuilder response = new StringBuilder(); while ((line = reader.readLine()) != null) { response.append(line); } reader.close(); conn.disconnect(); // 解析JSON数据(可使用Gson/Jackson库) System.out.println("Latest sensor data: " + response.toString()); } catch (Exception e) { e.printStackTrace(); } } }
如果一定要直接操作SQLite文件,可将服务器上的sensor_data.db同步到Java应用所在机器,使用SQLite JDBC驱动读取,Maven依赖如下:
<dependency> <groupId>org.xerial</groupId> <artifactId>sqlite-jdbc</artifactId> <version>3.41.2.1</version> </dependency>
四、关键注意事项
- 域名解析:确保GoDaddy的域名A记录已生效,可通过
ping 你的域名验证是否指向正确IP。 - 服务器防火墙:开放80端口(或你使用的自定义端口),允许外部访问。
- 安全性:公网环境下建议给接口添加API Key认证,改用HTTPS加密传输数据。
- 传感器适配:替换示例中的模拟引脚读取代码为你实际使用的传感器驱动逻辑(比如DHT11/DHT22的专用库)。
内容的提问来源于stack exchange,提问作者user10591778
相关产品推荐
相关产品推荐

