DHT 11传感器在Pi(A)上,我想从Pi(B)直接访问传感器 。
DHT11 SENSOR< ---> AAAAAA< ---> BBBBB
我可以使用Adafruit的库从Pi(A)成功获取传感器的数据。 (或者在Node-Red上运行带有“exe”节点的python脚本)
那么,我怎样才能从Pi(B)访问Pi(A)直接的GPIO上的传感器。 我一整天都在搜索,我发现的只是并行计算,分布式计算等。 是否可以在两个Pis之间创建TCP / IP隧道。
先谢谢大家。欢呼声。
答案 0 :(得分:0)
从我的观点来看,你有两个选择:
在两个Pis上安装node-red。在Pi(A) - 传感器-Pi--你可以做你需要的东西,f.i。读取传感器值。在您使用DHT11的特殊情况下,您可以从node-red根文件夹中安装npm node-dht-sensor
(如我的第二点所述)开始。如果您不想为此创建节点,可以快速而脏地使用自述文件中的示例并将其添加到函数节点:
var sensorLib = require('node-dht-sensor');
// sensor connected to the GPIO 4 :
if (sensorLib.initialize(22, 4)) {
var readout = sensorLib.read();
result = {
temperature: readout.temperature.toFixed(2)
humidity: readout.humidity.toFixed(2)
}
msg.payload = result;
} else {
msg.error = 'Failed to initialize sensor';
}
return msg;
然后将节点红本身配置为提供http端点,其接受GET / sensor1之类的调用,并使用RawSerial / GPIO节点的测量值进行回复。 Pi(B)可用于查询此资源。
只需在Sensor-PI(A)上安装https://www.npmjs.org/package/node-dht-sensor,然后修改自述文件中给出的示例或使用上面的版本。您必须围绕此创建一个Web服务器,请参阅节点自己的http模块。小例子:
var sensorLib = require('node-dht-sensor');
var server = require('http').createServer(function(request, response){
// Handle every request, get values from DHT11
var result, readout;
readout = sensorLib.read();
result = {
temperature: readout.temperature.toFixed(2)
humidity: readout.humidity.toFixed(2)
}
response.writeHead(200, { 'Content-Type': 'application/json' });
response.end(JSON.stringify(result));
});
if (sensorLib.initialize(22, 4)) {
server.listen(8080);
} else {
console.log("Error initializing sensor!");
}
免责声明:此代码既不容错也不处理特殊情况。未经测试。
答案 1 :(得分:0)
非常感谢你们。我的问题已经解决了。
我在Pi(B)上运行了一个TCP节点(如果安装了Node-Red)另外运行一个" netcat"命令侦听特定端口。
在Pi(A)上,我写了这个"非常基本的错误" python中的脚本(从我的DHT11传感器读取数据并将该数据发送到Pi(B) -
#!/usr/bin/python
import sys
import socket
import Adafruit_DHT
host = '192.168.0.28'
port = 8888
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except socket.error:
print ' Failed to create a socket.'
sys.exit(1);
print 'Socket Created'
sensor_args = { '11': Adafruit_DHT.DHT11,
'22': Adafruit_DHT.DHT22,
'2302': Adafruit_DHT.AM2302 }
if len(sys.argv) == 3 and sys.argv[1] in sensor_args:
sensor = sensor_args[sys.argv[1]]
pin = sys.argv[2]
else:
print 'usage: sudo ./Adafruit_DHT.py [11|22|2302] GPIOpin#'
print 'example: sudo ./Adafruit_DHT.py 2302 4 - Read from an AM2302 con$
sys.exit(1)
humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
if humidity is not None and temperature is not None:
print 'Temp={0:0.1f}*C Humidity={1:0.1f}%'.format(temperature, humidit$
s.connect((host, port))
print 'Connected to Node-Red.'
value1 = str(temperature)
value2 = str(humidity)
value3 = value1+" "+value2
s.send(value3);
s.close();
else:
s.close();
print 'Failed to Access the Sensor.Run the script again.'
对于那些使用DHT11 / DHT22的人。这是Adafruit在Github上的DHT代码的链接: https://github.com/adafruit/Adafruit_Python_DHT
(如果还有其他方法,请告诉我。我愿意学习所有替代方案。) 欢呼声。