Как подключить Arduino Nano к ESP8266 и BMP180?

У меня возникла проблема с моим приложением.

Используемое оборудование:

  • Последовательный беспроводной Wi-Fi-модуль ESP8266 для Интернета вещей
  • Robodyn Micro USB, совместимый с Arduino Nano V3.0 ATmega168 CH340G
  • ДАТЧИК: BMP180

Подключения:

  • Arduino Nano — ESP8266
  • CH-PD в Vcc
  • GPIO0 к GND
  • От рецепта к рецепту
  • От передачи к передаче
  • 3,3 В на 3,3 В
  • Сброс на GND
  • GND к GND

Arduino Nano для BMP180

  • 3,3 В на VIN
  • GND к GND
  • A5 в SCL
  • A4 в ПДД

Использованный скетч (загружен в Generic ESP8266 Board):

#include <DHT.h> // Библиотека DHT.h
#include <ESP8266WiFi.h> // Библиотека ESP8266WiFi.h
#include <SFE_BMP180.h>
#include <Wire.h>

SFE_BMP180 pressure;

const char* ssid     = "GOPI-LAPTOP";
const char* password = "kcejava123";
const char* host = "api.thingspeak.com";
const char* writeAPIKey = "CQSHDFP4EZFCDWKO";

void setup() {
  // Инициализация датчика
  Serial.begin(9600);
  delay(1000);
  if (pressure.begin())
    Serial.println("BMP180 init success");
  else {
    Serial.println("BMP180 init fail\n\n");
  }
  // Подключиться к сети Wi-Fi
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
  }
}

void loop() {
  char status;
  double T, P, p0, a;
  status = pressure.startTemperature();
  if (status != 0) {
    // Дождитесь завершения измерения:
    delay(status);
    status = pressure.getTemperature(T);
    if (status != 0) {
      // Распечатать измерение:
      Serial.print("temperature: ");
      Serial.print(T,2);
      Serial.print(" deg C, ");
      Serial.print((9.0/5.0)*T+32.0,2);
      Serial.println(" deg F");
    } else
      Serial.println("error retrieving pressure measurement\n");
  }
  status = pressure.startPressure(3);
  if (status != 0) {
    delay(status);
    status = pressure.getPressure(P, T);
    if (status != 0) {
      // Распечатать измерение:
      Serial.print("absolute pressure: ");
      Serial.print(P, 2);
      Serial.print(" mb, ");
      Serial.print(P*0.0295333727, 2);
      Serial.println(" inHg");
      p0 = 1013.25; // мы на высоте 1655 метров (Боулдер, Колорадо)
      Serial.print("relative (sea-level) pressure: ");
      Serial.print(p0, 2);
      Serial.print(" mb, ");
      Serial.print(p0*0.0295333727, 2);
      Serial.println(" inHg");
      a = pressure.altitude(P, p0);
      Serial.print("computed altitude: ");
      Serial.print(a, 0);
      Serial.print(" meters, ");
      Serial.print(a*3.28084, 0);
      Serial.println(" feet");
    }
  }
  // установить TCP-соединения
  WiFiClient client;
  const int httpPort = 80;
  if (!client.connect(host, httpPort)) {
    return;
  }
  String url = "/update?key=";
  url+=writeAPIKey;
  url+="&field1=";
  url+=String(T);
  url+="&field2=";
  url+=String(P);
  url+="\r\n";
  // Запрос к серверу
  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
    "Host: " + host + "\r\n" +
    "Connection: close\r\n\r\n");
  Serial.print(String("GET ") + url + " HTTP/1.1\r\n" +
    "Host: " + host + "\r\n" +
    "Connection: close\r\n\r\n");
  delay(30000);
}

Последовательный вывод:

BMP180 init fail

GET /update?key=CQSHDFP4EZFCDWKO&field1=8.04&field2=8.08
 HTTP/1.1
Host: api.thingspeak.com
Connection: close

GET /update?key=CQSHDFP4EZFCDWKO&field1=8.04&field2=8.08
 HTTP/1.1
Host: api.thingspeak.com
Connection: close 

Запросы:

• Как включить датчики BMP180? При настройке BMP180 с помощью Arduino (без ESP8266) вывод данных отображается на последовательном терминале.

• Как отправить данные на Thingspeak.com с BMP180, используя указанное оборудование?

, 👍0

Обсуждение

У меня такое чувство, что вы немного путаете, что и что делает. Похоже, вы используете Arduino как преобразователь USB в UART и программируете ESP8266, а затем подключаете BMP180 к Arduino, которую вы не программируете и которая даже не запущена., @Majenko

Почему бы просто не запустить BMP из ESP?, @dandavis


2 ответа


1

Подключения:

[...]

  • От рецепта к рецепту
  • От транзакции к транзакции

Это не решит проблему с инициализацией BMP180, но вам придётся перемкнуть линии Rx с Tx и Tx с Rx, если вы хотите что-то получить на последовательном терминале... К тому же, ваш Nano питается от 5 В, а ESP — от 3,3 В. Прямое подключение линий Rx/Tx Nano с напряжением 5 В к линиям Rx/Tx ESP с напряжением 3,3 В может быть небезопасным.

Что касается BMP180, рассчитан ли он на 3,3 В или только на 5 В? Если он рассчитан только на 5 В, он может не работать с ESP. Отсюда и сбой инициализации.

,

1

Для работы I2C необходимы подтягивающие резисторы. Обычно между SCL и VIN, а также SDA и VIN подключаются резисторы сопротивлением 4,7 кОм.

Возможно, вам стоит использовать преобразователь логических уровней для преобразования 3,3 В в 5 В (не делитель на резисторах, у него недостаточно резкие фронты для цифровых сигналов). Если я правильно помню, ESP может принимать 7 В на своих выводах, прежде чем его можно будет отключить (это указано в спецификации чипа), но это не значит, что это хорошая идея.

Как уже упоминалось выше, для подключения необходимо перекрёстно соединить последовательные выводы. Приёмный вывод Nano необходимо подключить к передающему выводу ESP, и наоборот.

,