Stap 2: Verbinding tussen Hard - en Software
Te praten via SPI hebben wij aan opstelling de framboos om SPI communicatie. De eenvoudigste manier om dit te doen is om de SPI via aan raspi-config.
Hoe we praten met de MCP23S17? Via SPI, maar wat dat gemiddelde dosis.
SPI is een mededeling van de meester-slaaf-bus. Bus betekent, dat we zoveel apparaten kunt aansluiten, zoals we, afhankelijk van de mogelijkheden van onze fiches willen en hoe veel chipselect onze Raad van bestuur heeft. Met de framboos die kreeg 2 chipselect kunnen we twee keer 8 chips gebruiken. Lees dit artikelvoor meer informatie.
Al met al moeten we binaire code te communiceren met onze apparaten te sturen. De eerste byte die we moeten sturen is altijd onze apparaat opcode waarin het hardwareadres van onze apparaat (0b0100) en het adres van de chip die wij toegang (0b000 en 0b001) en een beetje lezen/schrijven (0b00/0b01 willen). We moeten om één byte uit dit spul, gebruik een bitwise of de exploitant.
In javascript kunnen we dit met deze code:
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
De tweede byte is de opdracht die wij willen de slaaf te doen en de derde byte is de waarde die we schrijven, willen als we willen schrijven. Als we willen lezen gewoon we 0x00 omdat deze extra byte betekent een andere tik en tijd voor de slaaf uit te voeren en te beantwoorden. Er zijn veel verschillende opdrachten die u ook in deze pdf zien kunt. Omdat de chip aankan input en output op eigen, toewijzen we gewoon alle van hen als output.
Voor de communicatie gebruik ik de mcp23s17 bibliotheek voor nodejs. Hier is een kort voorbeeld te verbinden, lezen en schrijven van bepaalde gegevens:
// 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);