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








