Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
products:laboratory_iot:exp1 [2020/05/03 21:23] labuser29products:laboratory_iot:exp1 [2020/05/18 13:19] (текущий) – [Приступим] andiki
Строка 5: Строка 5:
 Когда программисты впервые знакомятся с новым языком программирования, то первым делом они пишут программу "Hello, World!" (Привет, Мир!). Все, что она делает— это выводит эту приветственную надпись на экран. Никакой полезной функции такая программа, казалось бы, не несет, но это заблуждение. Главная задача этой программы— убедиться, что все настроено верно, и что всё работает. Только после этого можно двигаться дальше, к более сложным программам. Когда программисты впервые знакомятся с новым языком программирования, то первым делом они пишут программу "Hello, World!" (Привет, Мир!). Все, что она делает— это выводит эту приветственную надпись на экран. Никакой полезной функции такая программа, казалось бы, не несет, но это заблуждение. Главная задача этой программы— убедиться, что все настроено верно, и что всё работает. Только после этого можно двигаться дальше, к более сложным программам.
  
-Классическим "Hello, World!" в мире программирования микроконтроллеров является мигание светодиодом. Именно это и будет наш первый эксперимент. Ниже представлен листинг программы первого эксперимента+==== Приступим ==== 
 +Классическим "Hello, World!" в мире программирования микроконтроллеров является мигание светодиодом. Именно это и будет наш первый эксперимент. Ниже представлен листинг программы первого эксперимента:
  
 <file python Exp1.py[enable_line_numbers="2", start_line_numbers_at="1"]> <file python Exp1.py[enable_line_numbers="2", start_line_numbers_at="1"]>
Строка 23: Строка 24:
 </file> </file>
  
-Введи код первой программы в среду программирования EsPy. Это сделать тремя способами.+Введи код первой программы в среду программирования EsPy. Это можно сделать тремя способами:
   - Набрать код программы в EsPy вручную   - Набрать код программы в EsPy вручную
   - Скопировать код и вставить его в EsPy   - Скопировать код и вставить его в EsPy
Строка 33: Строка 34:
 {{ :wiki:2020-05-03_21-20-43.png?nolink |}} {{ :wiki:2020-05-03_21-20-43.png?nolink |}}
  
 +Необходимо убедиться, что EsPy установлено соединение с Лабораторией IoT
 +([[products:laboratory_iot:connect|Подробнее о том, как это сделать]])
 +и отправить листинг интерпретатору Python, который находится в микроконтроллере.
  
 +{{ :products:2020-05-04_12-33-42.png?nolink |}}
 +
 +Результатом должно стать мигание синего светодиода в верхнем левом углу Лаборатории.
 +
 +{{ :products:ezgif-7-94859b24b844.gif?nolink |}}
 +
 +==== Не работает? ====
 +Если не получилось, то необходимо еще раз проверить подключение, убедиться, что соединение настроено
 +верно. Для этого еще раз внимательно прочитать статью [[products:laboratory_iot:connect|Подключение и настройка]]. Если все выполнено верно, но все равно не работает — [[products:laboratory_iot:not_working|Возможные проблемы и их устранение]]
 +
 +==== Как это работает? ====
 +Теперь, когда первый эксперимент удался, самое время разобраться как и почему это работает.
 +
 +В первых двух строках, с помощью оператора ''import'' мы подключаем необходимые системные библиотеки, а именно ''time'' и класс ''Pin'' из библиотеки ''machine'' 
  
 <code python [enable_line_numbers="2", start_line_numbers_at="1"]> <code python [enable_line_numbers="2", start_line_numbers_at="1"]>
Строка 39: Строка 57:
 import time  import time 
 </code> </code>
 +
 +''time'' отвечает за измерение времени, функции даты и за задержки, а ''Pin'' реализует возможность обращаться к портам GPIO (//англ. general-purpose input/output// по-русски //Интерфейс ввода/вывода общего назначения//), с его помощью можно настроить вывод микроконтроллера и подать на него напряжение.
 +
 +<WRAP center round info 60%>
 +[[https://pythonworld.ru/osnovy/rabota-s-modulyami-sozdanie-podklyuchenie-instrukciyami-import-i-from.html|Подробнее об import и from]]
 +</WRAP>
 +
 +Вызываем функцию ''_init()'' — это функция, которую мы написали и заботливо положили в память Лаборатории IoT при производстве. Она необходима для сброса состояния микроконтроллера в начальное состояние, чтобы результаты запуска другого эксперимента не влияли на текущий.
  
 <code python [enable_line_numbers="2", start_line_numbers_at="3"]> <code python [enable_line_numbers="2", start_line_numbers_at="3"]>
Строка 44: Строка 70:
 </code> </code>
  
 +В строке 5 мы объявляем переменную ''LedPin'' и присваиваем ей значение ''2''
 <code python [enable_line_numbers="2", start_line_numbers_at="5"]> <code python [enable_line_numbers="2", start_line_numbers_at="5"]>
 LedPin = 2 LedPin = 2
 </code> </code>
 +Как видно из её названия, она хранит номер вывода микроконтроллера, к которому подключен светодиод.
 +Все выводы микроконтроллера имеют свой номер, именно по этому номеру и происходит работа с ними из программы.
  
 +
 +Далее нам нужно настроить вывод микроконтроллера:
 <code python [enable_line_numbers="2", start_line_numbers_at="7"]> <code python [enable_line_numbers="2", start_line_numbers_at="7"]>
 led = Pin(LedPin, Pin.OUT) led = Pin(LedPin, Pin.OUT)
 </code> </code>
 +
 +Мы вызываем функцию Pin и передаем ей в качестве первого параметра номер вывода (который записан в переменной ''LedPin''), а вторым параметром мы сообщаем, что хотим настроить этот вывод как цифровой //Выход//. Результатом функции ''Pin'' является одноименный объект ''Pin'' вывода микроконтроллера, который мы записываем в переменную ''led''.
 +
 +
 +Теперь мы можем обращаться к этому объекту и влиять на состояние ножки микроконтроллера.
  
 <code python [enable_line_numbers="2", start_line_numbers_at="9"]> <code python [enable_line_numbers="2", start_line_numbers_at="9"]>
Строка 59: Строка 95:
     time.sleep(1)     time.sleep(1)
 </code> </code>
 +
 +Функция ''led.off()'' устанавливает низкий уровень на выводе ''led'', а функция ''led.on()'' — высокий. Таким образом мы подаем или снимаем напряжение со светодиода, который подключен к этому выводу.
 +
 +Зачем же нам ''time.sleep(1)''? Все дело в том, что микроконтроллер работает очень быстро, исполняя миллионы операций в секунду. Он может тысячи раз в секунду зажечь и потушить светодиод. Это слишком быстро, чтобы человек смог что либо заметить. Чтобы приостановить исполнение программы мы и вызываем функцию ''time.sleep''. В качестве параметра она принимает число секунд на которое нужно сделать паузу. В нашем случае мы делаем паузу на 1 секунду после зажигания светодиода и столько же после его выключения.
 +
 +Но что такое ''while True:''? Это цикл. Циклы— это важнейшие элементы программ. Они нужны, чтобы выполнять один и тот же участок кода несколько раз. В языке Python есть несколько видов циклов и ''while'' это один из них. Этот цикл выполняется до тех пор, пока выполняется условие, пока оно //истинно//. В нашем случае это константа ''True'', что переводится как //истина//. Получается, что наше условие всегда безусловно //истинно//, и наш цикл является бесконечным. Участок кода, который зажигает и гасит светодиод будет продолжаться бесконечно, пока на плату поступает питание и, пока, не будет прервано выполнение программы извне.
 +
 +Как Python понимает какой именно участок кода является //телом цикла//, какой именно участок кода необходимо повторять? Для этого в Python используются отступы. Как можно видеть код в строках с 10 по 13 начинается не с начала, а с некоторым отступом. Вот именно тот участок кода, который обладает данным отступом и есть //тело цикла//.
 +
 +<WRAP center round info 60%>
 +  * [[https://pythonworld.ru/osnovy/cikly-for-i-while-operatory-break-i-continue-volshebnoe-slovo-else.html|Подробнее о циклах в Python]]
 +  * [[https://pythonworld.ru/osnovy/sintaksis-yazyka-python.html|Подробнее о синтаксисе языка Python]]
 +</WRAP>
 +
 +==== Остановка программы ====
 +Как же прервать исполнение программы, когда она занята исполнением бесконечного цикла, ведь сама она никогда не закончится?
 +Нажмите на клавиатуре ''Ctrl+I'' или на кнопку 
 +
 +{{ :products:2020-05-04_12-35-46.png?nolink |}}
 +
 +В окне терминала появится сообщение ''KeyboardInterrupt:'' (Прерывание от клавиатуры)
 +