ESP8266 NodeMCU ADC
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 підключаються на порт 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 Card
- 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 - своя реалізація векторного керування. Підбиваю підсумки 2022 року
- Конструктор регуляторів моторів. Підбиваю підсумки 2022 року.
- Чому трифазні мотори стали такими популярними?
- FOC & Polar coordinates
- Конструктор регуляторів PMSM, BLDC двигунів
- Своя бібліотека для векторного керування безколекторними моторами
- Not Allowed
- Адаптивний ПІД регулятор
- Конструктор регуляторів моторів. Структура.
- Конструктор регуляторів моторів. Анонс.
Tags
tim nodemcu encoder pwm solar watchdog atmega mongodb timer ngnix mpu-6050 options docker gps html foc esp8266 barometer bkp examples mpx4115a bldc pmsm programmator wifi bmp280 dht11 stm32 websocket bme280 usb bluetooth flask uart sensors max1674 motor i2c rtc hih-4000 remap flash capture dma rs-232 led mpu-9250 3d-printer eeprom adc books sms web usart battery avr rfid python gpio exti ethernet java-script eb-500 displays smd dc-dc lcd css ssd1331 ssd1306 meteo servo nvic soldering brushless git raspberry-pi st-link piezo
Архіви