Как подключить 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, используя указанное оборудование?
@user38663, 👍0
Обсуждение2 ответа
Подключения:
[...]
От рецепта к рецептуОт транзакции к транзакции
Это не решит проблему с инициализацией 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. Отсюда и сбой инициализации.
Для работы I2C необходимы подтягивающие резисторы. Обычно между SCL и VIN, а также SDA и VIN подключаются резисторы сопротивлением 4,7 кОм.
Возможно, вам стоит использовать преобразователь логических уровней для преобразования 3,3 В в 5 В (не делитель на резисторах, у него недостаточно резкие фронты для цифровых сигналов). Если я правильно помню, ESP может принимать 7 В на своих выводах, прежде чем его можно будет отключить (это указано в спецификации чипа), но это не значит, что это хорошая идея.
Как уже упоминалось выше, для подключения необходимо перекрёстно соединить последовательные выводы. Приёмный вывод Nano необходимо подключить к передающему выводу ESP, и наоборот.
- Как навсегда изменить скорость передачи данных ESP8266 (12e)?
- Arduino Nano, ESP8266-01 связь
- Использовать NodeMCU 12E (ESP8266) в качестве экрана Wi-Fi для Arduino Nano
- Отправить AT-команды на ESP8266 с последовательного монитора Arduino Nano.
- Питание модуля ESP8266 от arduino nano
- Подключение ESP 01 к Nano
- Как передать AT-команды Лоре из UART ESP32?
- Модули HC-12 перестали принимать, не могу понять почему
У меня такое чувство, что вы немного путаете, что и что делает. Похоже, вы используете Arduino как преобразователь USB в UART и программируете ESP8266, а затем подключаете BMP180 к Arduino, которую вы не программируете и которая даже не запущена., @Majenko
Почему бы просто не запустить BMP из ESP?, @dandavis