Не удается заставить Wi-Fi модуль esp8266-12 всегда точно считывать входящее напряжение analogRead
Итак, у меня есть и arduino uno, который запускает выход на вывод 8. Этот код не находится в этом файле просто для ясности. Оттуда я беру этот вывод и с его помощью запускаю пин 0 на модуле Wi-Fi. Я использую pin 0, потому что из того, что я понимаю, у всех других контактов есть pullup или pulldown резистор. Когда pin 0 горячий, я хочу распечатать это значение. Иногда это работает, когда я делаю это в других случаях аналоговые значения считываются очень низко. Я использую 3,3 В от arduino uno, и я планирую получить регулятор напряжения для модуля wifi, но вызовет ли это такую проблему? Я новичок в arduino, поэтому, если у кого-то есть какие-либо идеи, я был бы признателен за очень тупое объяснение. Большое спасибо. Кроме того, причина, по которой у меня задержка выключена так низко, заключается в том, что это, казалось, заставляло аналоговый сигнал подниматься чаще. Я не уверен, почему это будет иметь значение, но при задержке 3000 он почти никогда не изменит аналоговое значение, но когда я уменьшил задержку до одного, значение прошло гораздо более последовательно. В настоящее время код просто выводит низкие аналоговые числа и иногда всплывает 1023, когда напряжение подается, но не последовательно. И иногда это просто прекращается совсем, пока я продолжаю пытаться какое-то время. Я получаю напряжение на контакт, однако, поэтому я знаю, что у меня есть полная схема и мощность.
включить
#include <ESP8266HTTPClient.h>
#include <ESP8266WiFi.h>
const char* ssid = "ENDOWED Underwear";
const char* password = "endowwear";
HTTPClient http;
static const uint8_t D0 = 16;
static const uint8_t D1 = 5;
static const uint8_t D2 = 4;
static const uint8_t D3 = 0;
static const uint8_t D4 = 2;
static const uint8_t D5 = 14;
static const uint8_t D6 = 12;
static const uint8_t D7 = 13;
static const uint8_t D8 = 15;
static const uint8_t D9 = 3;
static const uint8_t D10 = 1;
int featherPin = D3;
void setup() {
Serial.begin(115200);
pinMode(featherPin, INPUT);
WiFi.begin(ssid, password);
while(WiFi.status() != WL_CONNECTED) {
delay(10);
Serial.println("Waiting for connection");
}
}
void loop() {
int sensorValue = analogRead(featherPin);
if (WiFi.status() == WL_CONNECTED) {
Serial.println("yay connect");
http.begin("http://10.150.40.121:3000/");
http.addHeader("Content-Type", "text/plain");
int httpCode = http.POST("Message from ESP8266");
String payload = http.getString();
// Serial.println(payload);
http.end();
} else {
Serial.println("Error in Wifi connection");
}
if (sensorValue > 850) {
http.begin("http://10.150.40.121:3000/home");
http.addHeader("Content-Type", "text/plain");
int httpCode = http.POST("Message from ESP8266");
String payload = http.getString();
Serial.println(payload);
Serial.print("hi");
http.end();
} else if (sensorValue < 850) {
Serial.print(sensorValue);
// Serial.println("I am not hot");
}
// digitalWrite(trigPin, LOW);
// delayMicroseconds(1);
// digitalWrite(trigPin, HIGH);
// delayMicroseconds(2);
// digitalWrite(trigPin, LOW);
//
// pinMode(echoPin, INPUT);
// duration = pulseIn(echoPin, HIGH);
//
// inches = (duration / 2) / 74;
// Serial.println(inches);
//
// spaceIntruded = inches;
//
// if (spaceIntruded <= 50 || spaceIntruded >= 900){
// digitalWrite(ledPin, HIGH);
// digitalWrite(hornPin, HIGH);
// Serial.println("Intruder Detected!");
// Serial.println("Sending text Notification...");
// delay(500);
// Serial.println("Armed...");
// }
//
// else{
// digitalWrite(hornPin, LOW);
// digitalWrite(ledPin, LOW);
// }
delay(1);
}
@user52703, 👍1
Обсуждение1 ответ
Аналого-цифровое преобразование - это один из аспектов1, в котором ESP8266 очень плох. Он имеет один вывод АЦП, который может считывать максимум 1 В.
Этот контакт является единственным контактом, который вы можете использовать с analogRead()
. Любые попытки использовать любой другой контакт просто используйте этот контакт вместо этого. Параметр (pin) для analogRead(pin)
игнорируется, и независимо от того, что вы делаете, считывается только один контакт АЦП. Кроме того, контакт нельзя использовать ни для чего другого. Ни одна из цифровых функций не может быть использована с ним, так как с контактом не связан номер GPIO.
Некоторые платы включают простой делитель напряжения на выводе АЦП, чтобы считывать более высокое напряжение, например, NodeMCU:
Если на вашей плате нет такого разделителя, вам придется реализовать его (или что-то подобное), чтобы иметь возможность считывать входящее напряжение 3,3 В.
1 ESP8266 отлично подходит для Wi-Fi, но довольно плох для всего остального. Ему серьезно не хватает внутренних периферийных устройств (у него даже нет I2C). Для более функционального решения вы можете рассмотреть возможность обновления до ESP32.
- Отправка значения с одного Arduino на другой
- Аналоговое чтение с шумом — Arduino Uno VS ESP12e
- Как масштабировать сигнал от 0 до 5 В до -5 В до +5 В?
- AT-команда не отвечает на последовательный монитор
- Отправка данных Arduino в MySQL с помощью phpMyAdmin и XAMPP на Windows10
- Arduino выводит значения мусора на serial monitor с ESP8266
- ошибка: espcomm_upload_mem failed при загрузке скетча
- фатальная ошибка ESP8266WiFi.h: Такого файла или каталога нет
`Когда контакт 0 горячий, я хочу напечатать это значение"...? Какая ценность? Что вы имеете в виду под "горячим"?, @Majenko
Когда вывод 0 на Arduino uno горячий, то есть к нему приложено 3,3 В, я хочу аналогизировать изменение значения. Если напряжение не подается, оно должно считываться как номер партии, а когда подается напряжение, оно должно считываться как высокое число, и иногда это происходит, но оно никоим образом не согласуется. Я не уверен, что это потому, что я беру 3,3 В от arduino uno, но я также попытался взять его от 5 В на arduino uno и погрузить его вниз с помощью регулятора напряжения, и я получаю ту же проблему. Однако это был регулируемый регулятор напряжения. Я собираюсь купить тот, который специально предназначен для 3,3 В., @user52703
Есть ли у вас контакт, подключенный к контакту аналогового входа, а также к контакту 0? Вы же знаете, что ESP8266 имеет только один аналоговый вход, и это специальный вывод, а не один из обычных выводов Dx, да?, @Majenko
Нет, я этого не делал, и я не понял, что вы имеете в виду под DX-контактом, и у меня есть контакты, припаянные для каждого контакта, и я очень касаюсь выхода из arduino uno на 0-контакт, и никаких последовательных изменений не происходит. На данный момент он работает вообще, но иногда он работает. Но этот штифт не соединен с аналоговым штифтом, это просто штифт. Все контакты припаяны, и я использую только контакт 0, потому что у него нет внутреннего резистора pullup pulldown. Когда я попытался использовать другие контакты, то вообще не смог заставить это значение измениться. Только когда я переключался на 0, он иногда считывал изменения., @user52703
https://www.microcenter.com/product/460313/feather-huzzah-with-esp8266-wifi Это модуль Wi-Fi, который я использую, @user52703
Контакт с надписью ADC - единственный, который можно использовать с analogRead. И если только эта плата не включает в себя делитель, она не может считывать больше 1В., @Majenko
Как вы думаете, я мог бы понизить напряжение до одного вольта и работать с ним таким образом? Я отслеживаю только одно значение или то, как бы это сделал ypu. У меня есть два файла-один для arduino uno и один для пера. Я просто хочу прочитать и проверить состояние одного контакта. Я установил датчик в программе arduino, который запускает вход и делает вывод kne на модуле Wi-Fi, чтобы я мог считывать изменение от низкого уровня к высокому. Я также мало что знаю о rx TX, но я читал, что могу разговаривать с этим модулем или должен использовать другой модуль Wi-Fi. Еще раз спасибо за помощь., @user52703
ДА. Да, можно. Гугл знает как., @Majenko
Я понимаю, что Google знает, как это сделать. Я погуглил свой путь до этого момента. Я просто ищу какого-то направления у кого-то с опытом, потому что только два дня назад начал учиться таким определенным вещам, в которых запутался. Я прочитал десятки статей, так что если бы вы могли направить меня в нужном направлении или, может быть, объяснить это с вашей точки зрения, я был бы вам очень признателен. Большое спасибо за вашу помощь., @user52703
Ключевое слово, о котором я уже упоминал, - "делитель". В частности, делитель напряжения. Основной принцип электроники, который вам нужно изучить. Однако на плате он уже может быть установлен, так что проверьте руководство или схему., @Majenko
Это круто. Спасибо. Мне это нужно. Мой последний вопрос это вывод с надписью АЦП могу ли я рассматривать этот вывод как обычное аналоговое считывание кода и знаете ли вы почему я не могу сделать цифровое считывание. Это потому, что он плавает до тех пор, пока его нет. Сейчас мне в основном любопытно. Еще раз спасибо. Это полезно., @user52703
почему вы хотите использовать АЦП esp8266, если у вас есть Uno с 5 хорошими аналоговыми входами в настройке проекта?, @Juraj
Вывод АЦП можно использовать только с функцией analogRead (). Никакой другой вывод не может этого сделать, и ничего другого нельзя сделать с выводом АЦП. Он напрямую подключен к АЦП, встроенному в микросхему, и больше ни к чему. Вы не можете использовать
digitalRead()
,digitalWrite()
,pinMode()
илиanalogWrite()
. У него даже нет вывода для этих функций., @MajenkoМайенко прав, что единственный pin, который вы можете использовать с **analogRead**, - это pin A0. Я бы добавил, что я думаю, что вы делаете ошибку, предполагая, что любой из этих других контактов может быть использован. Я также новичок в этом, но у меня есть два блока NodeMCU ESP8266, и только несколько контактов на самом деле полезны в качестве входа или выхода. Многие контакты предназначены для других целей, таких как последовательный RX/TX, хранение и RST. Pin D3, в частности, зарезервирован для FLASH. Некоторая информация [здесь](https://randomnerdtutorials.com/esp8266-pinout-reference-gpios/)., @S. Imp
Я бы также добавил, что **analogWrite** НЕ просто устанавливает некоторый уровень напряжения на контакте. Контакты могут идти только до 0 или 3.3-т. Е. Полностью **вкл** или полностью **выкл**. Для того, чтобы *эмулировать* некоторый уровень напряжения между ними, ESP8266 будет использовать [PWM](https://en.wikipedia.org/wiki/Pulse-width_modulation), который в основном быстро включает и выключает напряжение, чтобы имитировать промежуточное напряжение., @S. Imp