ESP8266 NodeMCU АЦП
ESP8266 имеет только один канал аналого-цифрового преобразователя (ADC0). АЦП 10-битный. Диапазон измеряемых напряжений 0..1 Вольт. Обратите внимание, на плате NodeMCU может быть впаян резистивный делитель напряжения. В этом случае на вход платы (A0) можно подавать от 0 до 3.3 В.
При считывании значения с АЦП получаем число в диапазоне от 0 до 1023. Если получили 1024 - это означает, что напряжение на входе ESP8266 превысило допустимый максимум (1 Вольт). ADC может работать в одном из двух режимов. Режим adc.INIT_ADC - измеряет напряжение на входе АDC0 (A0). Режим adc.INIT_VDD33 - измеряет системное напряжение (system voltage). Режим устанавливается командой adc.force_init_mode (mode_value). После этого надо перезагрузить NodeMCU. Только после перезагрузки произойдет смена режима. Считывания в режиме adc.INIT_ADC:
adc.read(0)
У ESP8266 только один АЦП канал, поэтому параметр всегда 0.
Считывания в режиме adc.INIT_VDD33:
adc.readvdd33(0)
Пример скрипта:
-- Простая инициализация
adc.force_init_mode(adc.INIT_ADC)
print(adc.read(0))
- Инициализация с проверкой необходимости перезагрузки
if adc.force_init_mode(adc.INIT_VDD33)
then
node.restart()
return
end
print("System voltage (mV):", adc.readvdd33(0))
Подключим потенциометр как показано на схеме:
И протестируем работу следующим скриптом:
-- ADC Init
adc.force_init_mode(adc.INIT_ADC)
function timer_do ()
print(`adc `..adc.read(0)..``)
end
-- Start timer
tmr.register(0, 1000, tmr.ALARM_AUTO, timer_do)
tmr.start(0)
В этом скрипте мы использовали таймер. Подробно работу таймеров рассмотрим позже. В примере таймер запускает функцию timer_do каждую секунду. Функция timer_do выводит считанные с АЦП данные.
Следующий пример скрипта, который отправляет данные (10 раз в секунду), когда к ESP8266 подключаются к TCP порту 333.
--WiFi AP Settup
wifi.setmode(wifi.STATIONAP)
cfg={}
cfg.ssid="ESPWIFI"
cfg.pwd="1234567890"
wifi.ap.config(cfg)
-- ADC Init
adc.force_init_mode(adc.INIT_ADC)
function timer_do()
if socket then
socket:send(`adc `..adc.read(0)..``)
end
end
-- Start timer
tmr.register(0, 100, tmr.ALARM_AUTO, timer_do)
tmr.start(0)
--Create Server
sv=net.createServer(net.TCP)
socket=nil
if sv then
sv:listen(333, function(conn)
conn:on("receive", receiver)
conn:on("connection", function(sck, c) socket=sck end)
conn:on("reconnection", function(sck, c) socket=sck end)
conn:on("disconnection", function(sck, c) socket=nil end)
end)
end
Примечание: В этом примере использована простая работа с сокетом. Подумайте почему так делать не рекомендуется. Когда поймете, постарайтесь смоделировать ситуацию когда данные клиенту приходить перестанут.
Если подключимся любимой терминальной программой, например JuiceSSH к ESP8266 (IP: 192.168.4.1 Port: 333) получим следующую картину:
Как и в предыдущих примерах мы сделаем интерфейс в программе ReboRemoFree для отображения данных в виде графика. Нажимаем на свободном пространстве нового интерфейса и в меню выбираем plot.
Задаем ему ID:
Указываем минимальное и максимальное значение:
Интерфейс готов. Теперь крутим ручку потенциометра и наблюдаем показатели напряжения в виде графика.
Желаю успехов.
Смотри также:
- ESP8266 NodeMCU Первое знакомство. Делаем WiFi розетку
- ESP8266 NodeMCU. PWM
- ESP8266 NodeMCU. ADC
- ESP8266 NodeMCU. timer, rtc, SNTP, cron
- ESP8266 NodeMCU. Файловая система + SD карточка
- ESP8266 NodeMCU. UART
- GPS-трекер на базе ESP8266
- GPS-трекер + Дисплей SSD1306
- ESP8266 NodeMCU. SSD1306. U8G
- ESP-01 (ESP8266) upgrade flash memory to 4MB
- ESP8266 NodeMCU. I2C. BME280/
- Метеостанция на ESP8266
Додати коментар
Недавні записи
- 🇺🇦 FOC Board STM32F103RB 🧩
- STM32 Motor control SDK - керування оборотами мотора за допомогою потенціометра 📑
- Flask✙Gunicorn✙Nginx➭😎
- STM32 Motor control SDK - програмне керування обертам мотора
- STM32 Motor control SDK - як створити перший проект
- Vue SVG. Приклад побудови живого параметричного креслення
- Вимірювання моменту мотора
- Vue SVG - компонент. Приклад 📑
- Flask + Vue 🏁 Финальный пример 🏁
- Flask, CORS, JSON-файл. Пример#6
Tags
bldc brushless stm32 motor web html css flask atmega foc git java-script pmsm raspberry-pi python websocket mongodb esp8266 nodemcu st-link tim timer docker ngnix programmator ssd1331 ssd1306 wifi uart meteo bme280 bmp280 i2c gps mpu-6050 mpu-9250 sensors 3d-printer options usb barometer remap watchdog flash eeprom rtc bkp encoder pwm servo capture examples dma adc nvic usart gpio books battery dc-dc sms max1674 avr lcd dht11 piezo rs-232 rfid solar exti bluetooth eb-500 displays ethernet led smd soldering mpx4115a hih-4000
Архіви