从Pi(B)访问Pi(A)的GPIO引脚

时间:2014-08-28 05:00:16

标签: raspberry-pi sensor

我的设置:

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隧道。

先谢谢大家。欢呼声。

2 个答案:

答案 0 :(得分:0)

从我的观点来看,你有两个选择:

  1. 在两个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)可用于查询此资源。

  2. 只需在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!");
    }
    
  3. 免责声明:此代码既不容错也不处理特殊情况。未经测试。

答案 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

(如果还有其他方法,请告诉我。我愿意学习所有替代方案。) 欢呼声。