如何利用esp8266(nodemcu1.0)进行spi传输

问题遇到的现象和发生背景

我已经成功将arduino uno与adxl355模块连接,运行代码并在serial monitor里得到了数据。我想把这个数据上传到云端,所以想利用esp8266(nodemcu)进行这类操作。
我有两个想法,第一,将nodemcu代替arduino uno,直接与adxl355连接并读出数据上传到云端。
第二,将esp8266与arduino连接。但是我不知道该怎么做?

问题相关代码,请勿粘贴截图

对于我的第一个想法,我遇到了严重的困难。对于spi传输协议,需要四根线,分别为SCLK,MISO,MOSI和CS。对于arduino uno, 这分别对应13 12 11 10引脚. 我的代码也存在以下部分
void writeRegister(byte thisRegister, byte thisValue) {
byte dataToSend = (thisRegister << 1) | WRITE_BYTE;
digitalWrite(CHIP_SELECT_PIN, LOW);
SPI.transfer(dataToSend);
SPI.transfer(thisValue);
digitalWrite(CHIP_SELECT_PIN, HIGH);
}

unsigned int readRegistry(byte thisRegister) {
unsigned int result = 0;
byte dataToSend = (thisRegister << 1) | READ_BYTE;

digitalWrite(CHIP_SELECT_PIN, LOW);
SPI.transfer(dataToSend);
result = SPI.transfer(0x00);
digitalWrite(CHIP_SELECT_PIN, HIGH);
return result;
}

void readMultipleData(int *addresses, int dataSize, int *readedData) {
digitalWrite(CHIP_SELECT_PIN, LOW);
byte dataToSend = (addresses[0] << 1) | READ_BYTE;
SPI.transfer(dataToSend);
for(int i = 0; i < dataSize; i = i + 1) {
readedData[i] = SPI.transfer(0x00);
}
digitalWrite(CHIP_SELECT_PIN, HIGH);
}

不难看出,每次spi传输前,要将CS引脚接为低电平,spi传输后,要将CS引脚换位高电平。但在把uno换为nodemcu后一直不成功,我查阅资料,发现nodemcu里的CS(D8)是直接接地的,无法被拉高!

运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

我想要知道有没有任何解答对我提出的两个想法之一?总之,想让adxl355与arduino连接得到数据后上传云端blynk(我们用nodemcu测试时已经搞懂了相关上传的代码),但是如何让arduino uno和nodemcu适配是我的疑问。

你可以构造spi时序呀

那么该怎么使用esp8266的spi呢?

esp8266提供了两种方式

      a.     复用管脚,将外部带有GPIO参数的管脚进行复用。具体代码如下:

        >>> from machine import Pin, SPI

        >>> prst = machine.Pin(5, machine.Pin.OUT)#定义rest引脚

       >>> pdc = machine.Pin(16, machine.Pin.OUT)#DC引脚

        >>> pcs = machine.Pin(10, machine.Pin.OUT)#CS引脚

       >>> spi = SPI(-1, baudrate=100000, polarity=1, phase=0, sck=Pin(0), mosi=Pin(2),                 miso=Pin(4))#初始化

       >>> spi.init(baudrate=200000)#初始化波特率

         该方法被称为“软件spi”

     b.  使用板载HSPI。具体代码如下:

     >>> from machine import Pin, SPI
     >>> hspi = SPI(1, baudrate=80000000, polarity=0, phase=0)
            使用该方法,esp8266会自动调用GPIO14,GPIO15,GPIO16,GPIO17.用户只需           将引脚对应连接,即可。

 因此,这种方式被称为硬件“SPI”