Контроллеры ESP и обучение ч.4 — Урок первый

топ 100 блогов kolganov_su24.12.2021

Заметки серии:

Мигание встроенным в NodeMCU светодиодом (Pin 2) в качестве альтернативы «Hello World!». Подать можно в 3 или 4 итерации. На практике, видимо, сделаю 3 итерации. Иначе это будет скучно детям, а на будущие уроки останется меньше новенького в части языка.

Вариант первый, без циклов. 

from machine import Pin
from time import sleep

LED = Pin(2, Pin.OUT)

LED.off()
sleep(1)
LED.on()
sleep(0.5)

LED.off()
sleep(1) 
LED.on() 
sleep(0.5)

LED.off()
sleep(1)
LED.on()
sleep(0.5)

Строки 1-2: Импорт модулей в формате from модуль import переменная или функция/метод, или пакет. Нужен пакет Pin, идущий в составе модуля machine и функция sleep из модуля time.

Строка 4: Инициализация переменной в качестве объекта пакета Pin. Устанавливается pin (контакт ввода-вывода) №2 и режим работы на вывод. Именно на pin 2 висит встроенный светодиод.

Строки 6-9 (и далее повтор): Подача на pin 2 высокого уровня напряжения, ожидание 1 сек, подача на pin 2 низкого уровня напряжения, ожидание 0.5 сек.

Что здесь интересного? Во-первых, подача высокого уровня напряжения на NodeMCU выключает светодиод. Во-вторых, функция sleep позволяет использовать значения с плавающей запятой. В этом смысле для коротких исходников не нужно импортировать функции sleep_ms, sleep_us.

Вариант второй, цикл While. 

from machine import Pin
from time import sleep

LED = Pin(2, Pin.OUT)

while True:
    LED.value(not LED.value())
    sleep(1)

Строка 5: Вход в бесконечный цикл While условие истинно. Поскольку в качестве условия передано выражение True, цикл будет выполнять бесконечно или до принудительного прерывания.

Строка 6:  Вместо методов on/off использован метод value, который возвращает текущее значение. Возвращается «1» для высокого уровня напряжения и «0» для низкого. Условием для внешнего вызова метода value передается инверсия значения. В данном случае «1» воспринимается интерпретатором аналогично «True», «0» аналогично «False».

Вариант третий, внутренний цикл for .. in .. range. 

from machine import Pin
from time import sleep

LED = Pin(2, Pin.OUT)

while True:
    LED.on()
    sleep(2)
    for n in range(1, 35):
        LED.value(not LED.value())
        sleep(0.05 + 0.01 * (35 - n))

Строка 9: Внутренний цикл for. Для каждой итерации (такта) цикла переменной «n» присваивается значение из диапазона (функция range) от 0 до 35.

Строка 11: Между переключениями задается ожидание, зависящее от значения «n» на текущем такте. Для n = 0 ожидание составит 0.05 + 0.35 = 0.4 сек, для n = 35 — 0.05 сек. Таким образом, мы получаем цикличное ускорение миганий светодиода.

Ребятам можно предложить небольшую оптимизацию наглядности кода с помощью введения дополнительной переменной. 

Вариант четвертый (видимо, его использовать в рамках первого урока не буду), объявление функции.

from machine import Pin
from time import sleep

def blinkTact(controlled_LED, range_max):
    for n in range(0, range_max):
        controlled_LED.value(not controlled_LED.value())
        sleep(0.05 + 0.01 * (range_max - n))

LED = Pin(2, Pin.OUT)

while True:
    LED.on()
    sleep(2)
    blinkTact(LED, 35)

Здесь внутренний цикл выносится в функцию blinkTact и добавлена наглядная оптимизация из третьего варианта.

В терминологии Python могу быть неточным, в этом случае прошу поправлять.

Оставить комментарий

Архив записей в блогах:
Посмотрел новый фильм с мучеником Мэлом в главной роли - "Хватай гринго!", который наши "находчивые" прокатчики переименовали в "Весёлые каникулы" (видимо, думают, что слово "гринго" у нас не понимают). С сочувствием слежу за судьбой Гибсона: ...
Есть такая развлекуха в Париже у ультраправых высокооплачиваемых адвокатов. Они добровольно записываются в списки бесплатной юридической помощи. И в свободное от основной работы время их привлекают бесплатными адвокатами для совершивших разные преступления местными понаехавшими французами ...
Дуже мені подобається робота із планом. Взагалі ці 20 років постійно працювала із плануванням але ніколи не пристосовувала його на своє звичайне життя. Щоденник паперовий вела але дуже безсистемно. А зараз розписую собі мету, свої бажання, що т реба зробити. Якось цікавіше робиться ...
Председатель Объединенного комитета начальников штабов Вооруженных сил США генерал Марк Милли через два дня после бунта в Капитолии предпринял секретные действия, чтобы ограничить способность тогдашнего президента Дональда Трампа отдать приказ о нанесении ядерного удара. Об этом стало ...
Вид творчества/техника/стиль: валяние, милифиориМатериалы: разноцветный ...