我已经成功将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”