сайт для палких паяльників

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)..'\n')
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)..'\n')
    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 к ESP8622 (IP: 192.168.4.1 Port: 333) получим следующую картину:

Как и в предыдущих примерах мы сделаем интерфейс в программе ReboRemoFree для отображения данных в виде графика. Нажимаем на свободном пространстве нового интерфейса и в меню выбираем plot.

Задаем ему ID:

Указываем минимальное и максимальное значение:

Интерфейс готов. Теперь крутим ручку потенциометра и наблюдаем показатели напряжения в виде графика.

Желаю успехов.

Смотри также:

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

 
Translate
Архіви

© 2011-2018 Андрій Корягін, Кременчук - Київ, Україна