Невозможно получить контакты на модуле Wi-Fi adafruit esp 8266 для чтения ВЫСОКОГО уровня на контакте 15

У меня есть esp8266, и я не могу получить значение HIGH, когда 3,3 В подается непосредственно на вывод вручную. У меня есть Arduino Uno, питающий esp8266. Он подключается к Wi-Fi, как и должен, и теперь все, что я хочу, это вручную увидеть, что когда я подаю 3 В, состояние меняется с 0 на 1. Кто-нибудь знает, как я могу это сделать.

Когда я подаю 3 Вольта непосредственно на контакт 15, он выводит 0. Даже если я попробую digitalWrite на контакте и установлю его на ВЫСОКИЙ уровень, он все равно будет показывать 0, и я последовательно напечатаю его. Моя конечная цель — использовать Arduino Uno для запуска и вывода сигнала на контакт 8. На стороне Arduino UNO я использую сверхзвуковой датчик. Когда датчик срабатывает, я хочу включить контакт 8. Отсюда я хочу использовать контакт 8 для подачи на контакт 15 на 8266 в качестве входа. Прежде чем я это сделал, я просто хотел увидеть, что когда вы вручную подаете 3 В, на выводе будет отображаться значение 1 или ВЫСОКИЙ, но независимо от того, что я делаю, значение не изменится. Как только я получу это значение как ВЫСОКОЕ, я смогу отправить второй запрос на сервер, как я уже, но теперь я хочу сказать, что произошел злоумышленник. Я не уверен, почему значение не изменится, но, будучи новичком в Arduino, я стараюсь сделать его простым и в идеале хотел бы подключить его таким образом.

#include <SoftwareSerial.h>
#include <ESP8266HTTPClient.h>
#include <ESP8266WiFi.h>

const char* ssid = "********";
const char* password = "********";

HTTPClient http;

static const uint8_t D8 = 15;
int featherPin = D8;

//int trigPin = 13;
//int echoPin = 12;
//int светодиодныйПин = 10;
//int HornPin = 11;
//
//int spaceIntrumed;
//
//длительность, см, дюймы;

void setup() {
  Serial.begin(115200);
  pinMode(featherPin,INPUT);

  WiFi.begin(ssid, password);

  while(WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.println("Waiting for connection");
 }

// Серийный.начало (9600);
// pinMode(trigPin, OUTPUT);
// pinMode(echoPin, INPUT);
// pinMode(ledPin, OUTPUT);
// pinMode(hornPin, OUTPUT);
// задержка(5000);
// Serial.println("Вооружен...");

}

void loop() {

  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"); 
    }
// digitalWrite(featherPin, HIGH);
    int sensorValue = digitalRead(featherPin);
    Serial.print(sensorValue);


// if (digitalRead(featherPin) == HIGH) {
// http.begin("http://10.150.40.121:3000/home");
// http.addHeader("Content-Type", "text/plain");
//
// int httpCode = http.POST("Сообщение от ESP8266");
// Строковая полезная нагрузка = http.getString();
// Serial.println(полезная нагрузка);
// Serial.print("привет");
// http.end();
// } еще {
// Serial.print(featherPin);
// Serial.println("Мне не жарко");
// }


// digitalWrite(trigPin, LOW);
// задержкаМикросекунды(1);
// digitalWrite(trigPin, HIGH);
// задержкаМикросекунды(2);
// digitalWrite(trigPin, LOW);
//
// pinMode(echoPin, INPUT);
// продолжительность =pulsIn(echoPin, HIGH);
//
// дюймы = (длительность/2)/74;
// Serial.println(дюймы);
//
// spaceIntrumed = дюймы;
//
// if (spaceIntrumed <= 50 || spaceIntrumed >= 900){
// digitalWrite(ledPin, HIGH);
// digitalWrite(hornPin, HIGH);
// Serial.println("Обнаружен злоумышленник!");
// Serial.println("Отправка текстового уведомления...");
// задержка(500);
// Serial.println("Вооружен...");
// }
//
// еще{
// digitalWrite(hornPin, LOW);
// digitalWrite(ledPin, LOW);
// }
    delay(30000);

}

, 👍0

Обсуждение

вы видите, как часть вашего кода правильно отформатирована на сером фоне? .... это потому, что текст имеет отступ как минимум на 4 пробела .... отформатируйте остальную часть кода ..... выделите весь код и щелкните значок {}, @jsotola

«Когда я подаю 3В, состояние меняется с 0 на 1», к чему вы подаете 3В? какой штифт? как долго? потому что у вас есть задержка в 30 секунд в каждом цикле - поэтому вы проверяете только каждые 30 секунд, @Jaromanda X

ps — не думал, что esp8266 нравятся такие длинные задержки, @Jaromanda X

Кроме того, какой результат вы сейчас получаете с помощью своего кода?, @Jaromanda X

Прямо сейчас, когда я подаю 3 вольта непосредственно к контакту 15, он выводит 0. Даже если я попробую digitalWrite на контакте и установлю его на ВЫСОКИЙ уровень, он все равно будет показывать 0, и я последовательно напечатаю. Моя конечная цель — использовать Arduino Uno для запуска и вывода сигнала на контакт 8. На стороне Arduino UNO я использую сверхзвуковой датчик. Когда датчик срабатывает, я хочу включить контакт 8. Отсюда я хочу использовать контакт 8 для подачи на контакт 15 на 8266 в качестве входа. Прежде чем я это сделал, я просто хотел увидеть, что когда вы вручную подаете 3 В, на выводе будет отображаться значение 1 или ВЫСОКИЙ, но независимо от того, что я делаю, значение не изменится. Как только я получу значение ВЫСОКОЕ, я смогу отправить..., @user52703

второй запрос к серверу, как я уже делал, говоря, что был злоумышленник. Я не уверен, почему значение не изменится, но, будучи новичком в Arduino, я стараюсь сделать его простым и в идеале хотел бы подключить его таким образом., @user52703


1 ответ


Лучший ответ:

1

Пин 15 является одним из контактов конфигурации загрузки (0, 2, 15) и при загрузке должен иметь низкий уровень. Чтобы обеспечить это, платы разработки с esp8266 имеют внешнее понижение напряжения на контакте 15 (и повышение напряжения на контактах 0 и 2). Чтобы прочитать вывод ВЫСОКИЙ, вам необходимо преодолеть понижение.

Adafruit Feather HUZZAH имеет резистор сопротивлением 4,7 кОм для понижения напряжения, поэтому это «сильное» понижение напряжения. NodeMcu имеет резистор 12 кОм на io 15.

Из схемы Adafruit Feather HUZZAH

Примечание: установка вывода как ВЫХОД и ВЫСОКИЙ не приводит к тому, что в коде он читается как ВЫСОКИЙ. С помощью digitalRead можно прочитать только состояние контакта INPUT (только на некоторых микроконтроллерах digitalRead считывает тот же регистр, что и digitalWrite).

,

Мне это непонятно. Что вы подразумеваете под преодолением выпадания? Не могли бы вы рассказать об этом немного подробнее или послать меня туда, где можно найти ресурс, который сможет прояснить это. Мне трудно полностью представить, что вы имеете в виду. Еще раз спасибо, что нашли время ответить. Я также устанавливаю ввод в строке 36 в качестве ввода. Я попробовал сделать ВЫСОКИЙ уровень, чтобы попробовать другую идею, но знаю, что не до конца разбираюсь в том, что я могу и не могу сделать., @user52703

Какой именно у вас модуль Wi-Fi esp 8266 adafruit?, @Juraj

https://www.microcenter.com/product/460313/feather-huzzah-with-esp8266-wifi Кроме того, это не обязательно должен быть контакт 15, если выпадающее меню является проблемой. Я попробовал последовательную печать всех состояний цифрового считывания контактов из пера Arduino, и я выбрал тот, который был в выключенном состоянии, чтобы он был горячим с напряжением 3,3 В от Arduino, когда он запускает выход на контакте 8, когда он соответствует условию срабатывания сигнализации. . Дайте мне знать, понятно ли то, что я насыщаю., @user52703

вы не можете определить состояние выходного контакта с помощью digitalRead. большинство контактов esp8266 имеют ВЫСОКИЙ уровень при включении питания или загрузке, @Juraj

Я не пытаюсь определить состояние выходного контакта с помощью цифрового чтения. Я планирую запустить Arduino Uno на выводе 8 в качестве выхода. От этого выхода будет жарко при 5В. Я беру 5 Вольт с платы Arduino и понижаю его до 3,3 В с помощью стабилизатора напряжения и двух конденсаторов. Как только я получу это напряжение, я хочу подать выходной сигнал регулятора напряжения на контакт, скажем, 15 на модуле Wi-Fi. Контакт 15 на модуле Wi-Fi будет входом. Я хочу определить состояние входа на модуле Wi-Fi вот так. Я уже подтвердил питание всех контактов 15 и минуса., @user52703

даже если я прочитаю напряжение на своем измерителе, состояние входа не изменится, если я последовательно распечатаю цифровое считанное значение, которое сохраняется в переменной, @user52703

Я понимаю это, но отсюда я не могу сказать больше, что ввод должен быть сильнее, чем выпадание. но это не должно быть проблемой, но понижение сильное (4,7 кОм. Обычно 10 кОм). попробуйте другой пин., @Juraj

Хорошо я понял. Я пытаюсь понять твою подсказку. Я не уверен, что вы подразумеваете под понижением, а обычное сопротивление составляет 10 кОм. Я только вчера начал работать с Arduino, поэтому я не знаком ни с этими терминами, ни с тем, что мне следует искать в Интернете. Я читал документацию несколько дней, чтобы дойти до этого момента. Я постараюсь посмотреть, что смогу найти. судя по тому, что вы выразили.Спасибо, @user52703

https://www.electronics-tutorials.ws/logic/pull-up-resistor.html, @Juraj

http://hyperphysicals.phy-astr.gsu.edu/hbase/electric/watcir.html, @Juraj

Большое спасибо. Теперь я понимаю, что вы имеете в виду. Это очень полезно. Вы говорите, что на штыре высокое сопротивление и что мое значение не переводится точно. Я прочитаю этот материал и посмотрю, смогу ли я найти способ вернуть булавку в истинное состояние., @user52703

Итак, я читаю кое-что об использовании input_pulldown или input_pullup для изменения состояния. Вам это вообще знакомо? Интересно, на правильном ли я пути?, @user52703

Эй, спасибо за твою помощь вчера. Это очень помогло. Подвел меня к следующему шагу., @user52703