Контроллеры 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 могу быть неточным, в этом случае прошу поправлять.

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

Архив записей в блогах:
Лента ФБ принесла совершенно неукладывающееся в голове - ребенок в три месяца стоит! Что думаете? Такое возможно? Можете себе представить? Там в комментариях подробно и многие написали про то, что это вредно. А я вот даже и не знаю... У меня когнитивный диссонанс. https://m.face ...
Когда я работала "певичкой в ресторане" (а я работала), мой репертуар составляли её песни. Я похожа на неё, очень. Даже голос похож. Приятно узнавать, что те, кого я любила, на кого хотела и пыталась быть похожей - оказались со мной рядом. Не ушли в Литву. А со мной, рядом. Аллегрова ...
Тут мне подсказали вопрос по физике/математике прям на пять с плюсом, хоть сами, видимо, того и не подозревали. Как мы помним, в предыдущих сообщениях речь шла про то, что эффект «чем дальше, тем быстрее от нас удаляется» с неизбежностью реализуется при практически любом рандомном по ...
Давненько что-то я на религиозно-философские темы не рассуждал. В ЖЖ, в смысле. В одной недавней беседе, зашедшей (как это нередко случается в разговорах со мной) о религиозной тематике, мой собеседник доказывал, что христианский гуманизм - ...
«Израиль» потратил по милости спятившего Нетаньяху 11 млрд шекелей для подготовки нападения на Иран, которое так и не состоится. Финансовая система сионистского «государства» трещит по швам. Оборонка сжирает всё. Руководство не может ...