mirror of
https://github.com/esp8266/Arduino.git
synced 2025-04-21 10:26:06 +03:00
73 lines
2.3 KiB
C++
73 lines
2.3 KiB
C++
/*
|
|
SPI Slave Demo Sketch
|
|
Connect the SPI Master device to the following pins on the esp8266:
|
|
|
|
GPIO NodeMCU Name | Uno
|
|
===================================
|
|
15 D8 SS | D10
|
|
13 D7 MOSI | D11
|
|
12 D6 MISO | D12
|
|
14 D5 SCK | D13
|
|
|
|
Note: If the ESP is booting at a moment when the SPI Master has the Select line HIGH (deselected)
|
|
the ESP8266 WILL FAIL to boot!
|
|
See SPISlave_SafeMaster example for possible workaround
|
|
|
|
*/
|
|
|
|
#include "SPISlave.h"
|
|
|
|
void setup() {
|
|
Serial.begin(115200);
|
|
Serial.setDebugOutput(true);
|
|
|
|
// data has been received from the master. Beware that len is always 32
|
|
// and the buffer is autofilled with zeroes if data is less than 32 bytes long
|
|
// It's up to the user to implement protocol for handling data length
|
|
SPISlave.onData([](uint8_t * data, size_t len) {
|
|
String message = String((char *)data);
|
|
(void) len;
|
|
if (message.equals("Hello Slave!")) {
|
|
SPISlave.setData("Hello Master!");
|
|
} else if (message.equals("Are you alive?")) {
|
|
char answer[33];
|
|
sprintf(answer, "Alive for %lu seconds!", millis() / 1000);
|
|
SPISlave.setData(answer);
|
|
} else {
|
|
SPISlave.setData("Say what?");
|
|
}
|
|
Serial.printf("Question: %s\n", (char *)data);
|
|
});
|
|
|
|
// The master has read out outgoing data buffer
|
|
// that buffer can be set with SPISlave.setData
|
|
SPISlave.onDataSent([]() {
|
|
Serial.println("Answer Sent");
|
|
});
|
|
|
|
// status has been received from the master.
|
|
// The status register is a special register that bot the slave and the master can write to and read from.
|
|
// Can be used to exchange small data or status information
|
|
SPISlave.onStatus([](uint32_t data) {
|
|
Serial.printf("Status: %u\n", data);
|
|
SPISlave.setStatus(millis()); //set next status
|
|
});
|
|
|
|
// The master has read the status register
|
|
SPISlave.onStatusSent([]() {
|
|
Serial.println("Status Sent");
|
|
});
|
|
|
|
// Setup SPI Slave registers and pins
|
|
SPISlave.begin();
|
|
|
|
// Set the status register (if the master reads it, it will read this value)
|
|
SPISlave.setStatus(millis());
|
|
|
|
// Sets the data registers. Limited to 32 bytes at a time.
|
|
// SPISlave.setData(uint8_t * data, size_t len); is also available with the same limitation
|
|
SPISlave.setData("Ask me a question!");
|
|
}
|
|
|
|
void loop() {}
|