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
Tags
web java-script bmp280 adc bldc stm32 rs-232 programmator 3d-printer flash pwm sms motor docker raspberry-pi meteo gps ngnix bme280 timer ssd1331 mpu-6050 bkp battery rfid st-link tim mpx4115a ssd1306 encoder atmega pmsm wifi options rtc examples nvic soldering mongodb esp8266 books lcd foc flask barometer bluetooth ethernet brushless uart watchdog servo gpio solar git remap dma usart eb-500 smd nodemcu sensors displays html python capture dht11 led i2c eeprom piezo exti websocket max1674 usb dc-dc avr hih-4000 css mpu-9250
Архіви








