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

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

Архив записей в блогах:
В прошлый большой обзор БКЛ я не включил станции «Авиамоторная» и «Лефортово». Просто не успел отснять их. Исправляюсь и показываю, как там дела обстоят. Плюс в качестве бонуса наклон №1 на станции «Нижняя Масловка». 1. Сооружение вестибюля №1 на станции «Нижняя Масловка». 2. ...
"Отец Невесты" - А-а-а-а-а!!! Какой потрясающий фильм! Смотреть, смотреть, смотреть! Мне настолько понравился Стив Мартин в этом фильме, что я в очередной раз перепутала его с Лесли Нильсоном и неожиданно для себя обнаружила, что тот умер. Это был ...
Сегодня испарилось еще одно сомнение, по поводу того, что Дельта-банк валили умышленно. Силенок нет сегодня умничать, ибо на борьбу с ветряными мельницами банковской системы РБ, сегодня убил почти весь день и вечер.  Как же они заебали... ...
А Задорнов-то окончательно ебанулся. UPD . От всей души желаю ему такой же SPA-салон, как у МБХ и таких же розог, которых он пожелал девчонкам. Гори в аду, ...
Тут попросили выложить фотки с предновогодним Тбилиси)ну вот, эти теремочки на ...