Paso 2: Conexión entre hardware y Software
Para hablar via SPI tenemos que configurar la frambuesa para permitir la comunicación SPI. La forma más sencilla de hacerlo es que SPI via a raspi-config.
¿Cómo hablamos a los MCP23S17? Través de SPI, pero qué significa la dosis.
SPI es un bus de comunicación maestro-esclavo. Bus significa, podemos conectar tantos dispositivos como queramos, dependiendo de las posibilidades de nuestros chips y cómo mucho chipselect nuestra Junta ha. Con la frambuesa que consiguió 2 chipselect podemos utilizar chips de 8 dos veces. Para obtener más información, por favor, lea este artículo.
Con todo, tenemos que enviar código binario para comunicarse con nuestros dispositivos. El primer byte que tenemos que enviar es siempre nuestra operación de dispositivo que contiene la dirección de hardware de nuestro dispositivo (0b0100) así como la dirección de la viruta que queremos acceso (0b000 y 0b001) y un poco de lectura y escritura (0b00/0b01). Para hacer un byte de este material, tenemos un bit a bit o operador.
En javascript podemos hacer esto con este código:
var hard_addr = 0b01000000; // we appended 4 zeros to avoid a bit shift var chip_addr = 0b0010; // 0b0000 we also appended one zero to avoid a bit shift var read_code = 0b01; // 0b00 // A = hard_addr, B = chip_addr, C = read_code // AAAABBBC var device_opcode = hard_addr | chip_addr | read_code; // 0b01000011
El segundo byte es el comando que queremos que el esclavo no y el tercer byte es el valor que queremos escribir, si queremos escribir. Si queremos leer que sólo escribimos 0 x 00 porque este byte adicional es otra señal y tiempo para el esclavo ejecutar y responder. Hay un montón de diferentes comandos que también se pueden ver en este pdf. Porque el chip puede manejar entrada y salida por cuenta propia, sólo asignamos todas ellas como salida.
Para la comunicación, utilizar la biblioteca de mcp23s17 de investigación. Aquí está un breve ejemplo para conectarse, leer y escribir algunos datos:
// load the library MCPLib = require('mcp23s17'); // create new instance width device and chip_adress // needed default settings are set (more options will follow) mcp_1 = new MCPLib.MCP23S17( '/dev/spidev0.0', 0 ); // connect decive mcp_1.connect(); var status = 0b10000000; setInterval( function(){ if( status == 0b00000000 ){ status = 0b10000000; } else { status = 0b00000000; } mcp_1.write( 'B', status ); mcp_1.read( 'B', function( s ){ console.log( s ); }); }, 500);