硬件连接篇:传感器与树莓派对接
- DHT11温湿度传感器
- 接线规范:
- VCC → 树莓派5V(引脚2/4)
- GND → 树莓派GND(引脚6)
- DATA → GPIO_04(BCM 4,物理引脚7)
- DATA与VCC间需加4.7kΩ上拉电阻
- 安全提示:避免短路,确保上拉电阻正确连接
- 接线规范:
- DS18B20温度传感器
- 接线规范:
- VCC → 3.3V(引脚1)或5V(引脚2)
- GND → 树莓派GND(引脚6)
- DATA → GPIO_01(BCM 18,物理引脚12)
- DATA与VCC间需加4.7kΩ上拉电阻
- 特殊配置:需启用树莓派1-Wire总线,通过
sudo raspi-config开启
- 接线规范:
- 光敏电阻(模拟传感器)
- 接线方案:
- 需配合MCP3008 ADC芯片使用
- VCC → 3.3V,GND → GND
- 信号输出 → ADC通道引脚
- 替代方案:使用数字光敏传感器(如TSL2561,通过I²C协议)
- 接线方案:
软件配置篇:Pi4J库与传感器驱动
-
Pi4J库安装与配置
curl -sSL https://pi4j.com/install | sudo bash # 一键安装 pi4j --version # 验证安装成功 -
DHT11数据读取代码
import com.pi4j.io.gpio.*; import com.pi4j.io.w1.*; public class DHT11Reader { public static void main(String[] args) throws Exception { // 初始化W1总线 W1Bus w1Bus = W1Bus.getInstance(); W1Device device = w1Bus.getDevice("28-xxxx"); // 替换为实际设备ID // 读取数据 W1Data data = device.readData(); double temp = data.getTemperature(); double hum = data.getHumidity(); System.out.println("温度: " + temp + "°C, 湿度: " + hum + "%"); } } -
DS18B20数据读取代码
import java.nio.file.*; public class DS18B20Reader { public static void main(String[] args) throws Exception { // 查找设备路径 String devicePath = Files.list(Paths.get("/sys/bus/w1/devices")) .filter(p -> p.startsWith("28-")) .findFirst().orElseThrow(); // 读取温度数据 String data = Files.readString(Paths.get(devicePath, "w1_slave")); double temp = Double.parseDouble(data.split("t=")[1]) / 1000; System.out.println("温度: " + temp + "°C"); } }
数据处理与可视化篇
- 实时数据可视化方案
-
控制台动态显示:
while(true) { double temp = readDS18B20(); System.out.println("\r温度: " + temp + "°C "); Thread.sleep(1000); } -
JFreeChart图形化展示:
// 创建折线图 XYSeries series = new XYSeries("温度"); series.add(System.currentTimeMillis(), temp); XYDataset dataset = new XYSeriesCollection(series); JFreeChart chart = ChartFactory.createXYLineChart( "温度监测", "时间", "温度(°C)", dataset ); // 保存为图片 ChartUtils.saveChartAsPNG(new File("temp.png"), chart, 800, 400);
-
- 云端数据上传与Web可视化
-
HTTP POST数据到服务器:
HttpClient client = HttpClient.newHttpClient(); String json = "{\"temp\":" + temp + "}"; HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("http://your-server.com/data")) .header("Content-Type", "application/json") .POST(BodyPublishers.ofString(json)) .build(); client.send(request, BodyHandlers.ofString()); -
前端实时显示:使用WebSocket或MQTT协议实现实时数据流
-
调试与常见问题解决
- 权限问题处理
- 添加用户到gpio组:
sudo usermod -aG gpio pi - 使用sudo运行Java程序:
sudo java -jar sensor.jar
- 添加用户到gpio组:
- 传感器连接问题
- DHT11数据校验失败:检查上拉电阻是否正确连接
- DS18B20无数据:确认1-Wire总线已启用,设备路径正确
- 数据可视化问题
- JFreeChart图表不显示:检查依赖库是否完整(需添加jfreechart-1.5.3.jar)
- WebSocket连接失败:确认服务器地址和端口配置正确
扩展应用方向
- 多传感器融合:结合温湿度、光照数据实现智能环境控制
- 异常检测:通过阈值触发报警(如温度过高时启动风扇)
- 历史数据分析:使用数据库存储数据并生成趋势报告
通过本指南,您已掌握从硬件连接到Java数据读取、可视化的全流程。建议下一步尝试结合MQTT协议实现远程传感器数据监控,或开发基于Spring Boot的物联网数据平台。

302

被折叠的 条评论
为什么被折叠?



