Arduino/ESP8266 нет данных SPI, поступающих от MCP3008

Я использую ESP8266 (NodeMCU Dev Kit v1) для чтения аналоговых данных через микросхему АЦП MCP3008.

Однако я получаю только нули, когда знаю, что должны присутствовать ненулевые данные. Я использую следующий код, который отлично работает при использовании MCP3008 с моим Arduino UNO. Используя подробный режим компиляции, я могу подтвердить, что при компиляции для ESP8266 это действительно связывает библиотеку ESP8266 SPI.

Я что-то упустил в коде?

#include <SPI.h>

#define CS_PIN 15 // Использовать 10 при компиляции для Arduino

int adcRead(int channel) {
  if ((channel > 7) || (channel < 0)) {
    return -1;
  }

  digitalWrite(CS_PIN, LOW);

  SPI.transfer(1);
  uint8_t r1 = SPI.transfer((channel + 8) << 4);
  uint8_t r2 = SPI.transfer(0);

  digitalWrite(CS_PIN, HIGH);

  return ((r1 & 3) << 8) + r2;
}

void setup() {
  SPI.begin();
  SPI.setBitOrder(MSBFIRST);
  SPI.setDataMode(SPI_MODE0);
  SPI.setFrequency(1000000); // 1 МГц -- убрать строку при работе на Arduino UNO
  Serial.begin(9600);
  digitalWrite(CS_PIN, HIGH);
}

void loop() {
  Serial.println(adcRead(0));
  delay(50);
}

Что касается проводки, у меня есть следующее

MCP3008   ESP8266
V_DD      3v3
V_REF     3v3
AGND      GND
CLK       GPIO14 (D5)
D_OUT     GPIO12 (D6)
D_IN      GPIO13 (D7)
CS        GPIO15 (D8)
DGND      GND

, 👍-1

Обсуждение

Я не вижу никакого pinMode(CS_PIN, OUTPUT);, @SoreDakeNoKoto

Это исправило это! Думаю, мне удалось это не заметить., @user1569339


1 ответ


1

У меня возникли проблемы с этим кодом и настройкой Adafruit Feather HUZZAH ESP8266.

Решение

Помимо добавления pinMode(CS_PIN, OUTPUT); в setup(), я также понизил частоту до гораздо более низкой. В моем случае снижение частоты до 10 000 дало хорошие показания.

,