You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何搭建服务器实现Arduino传感器数据传输至Java应用(已购GoDaddy域名)

实现Arduino传感器数据上传到服务器并在Java应用中使用的完整流程

一、服务器端配置(基于你的GoDaddy域名)

  1. 绑定域名与部署环境

    • 登录GoDaddy后台,将域名的A记录指向你的云服务器/VPS公网IP;如果用GoDaddy自带的托管主机,直接在控制面板开启PHP/Python运行环境。
    • 服务器端需要部署一个接收数据的后端接口,同时准备SQLite数据库文件(直接放在服务器可访问的目录下即可)。
  2. 编写数据接收接口(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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 13:00:49