MicroPython:Платы/ESP8266/Руководство по MicroPython для ESP8266/Где найти и как использовать командную строку: различия между версиями

Материал из Онлайн справочника
Перейти к навигации Перейти к поиску

(Новая страница: «{{MicroPython/Панель перехода}} {{Перевод от Сubewriter}} {{Myagkij-редактор}} <syntaxhighlight lang="python" enclose="div"> =С...»)
 
(не показана 1 промежуточная версия этого же участника)
Строка 2: Строка 2:
 
{{Перевод от Сubewriter}}
 
{{Перевод от Сubewriter}}
 
{{Myagkij-редактор}}
 
{{Myagkij-редактор}}
 +
 +
=Где найти и как использовать командную строку MicroPython REPL<ref>[http://docs.micropython.org/en/latest/esp8266/tutorial/repl.html docs.micropython.org - Getting a MicroPython REPL prompt]</ref>=
 +
 +
[[REPL]] расшифровывается как ''«Read Evaluate Print Loop»'', что можно перевести как ''«цикл "чтение-вычисление-вывод"»'' – так называется интерактивная командная строка [[MicroPython]], которую можно использовать при работе с [[ESP8266]]. [[REPL]] – это самый простой способ для тестирования вашего кода и запуска команд.
 +
 +
Есть два способа получить доступ к [[REPL]]: по кабельному соединению через последовательный [[UART-порт]] или по [[WiFi]].
 +
 +
==REPL через последовательный порт==
 +
 +
[[REPL]] всегда доступна через последовательный порт ''UART0'', работа которого осуществляется через контакты ''GPIO1 (TX)'' и ''GPIO3 (RX)''. Скорость передачи данных при работе с [[REPL]] – ''115200 бод''. Если у вашей платы есть преобразователь [[USB-Serial]], то вы сможете получить доступ к [[REPL]] прямо с [[ПК]]. В противном случае вам надо будет коммуницировать через [[UART]].
 +
 +
Чтобы получить доступ к [[REPL]] через преобразователь [[USB-Serial]], вам нужна будет программа для эмулирования терминала. На [[Windows]] для этого есть хорошая программа [[TeraTerm]], на [[Mac]] можно использовать встроенную программу screen, а на [[Linux]] есть [[picocom]] и [[minicom]]. Разумеется, есть множество других программ-терминалов, так что можете пользоваться той, что вам нравится.
 +
 +
К примеру, на [[Linux]] можно запустить:
 +
 +
<syntaxhighlight lang="ssh" enclose="div">
 +
picocom /dev/ttyUSB0 -b115200
 +
</syntaxhighlight>
 +
 +
Когда соединение через последовательный порт будет установлено, вы можете проверить его, несколько раз нажав Enter. Вы должны увидеть командную строку Python REPL, обозначенную с помощью >>>.
 +
 +
==WebREPL – командная строка через WiFi==
 +
 +
WebREPL позволяет использовать командную строку Python по WiFi через браузер. Поддерживаются последние версии Firefox и Chrome.
 +
 +
Для вашего удобства клиент WebREPL [http://micropython.org/webrepl размещен на сайте MicroPython]. Или же вы можете установить его локально из [https://github.com/micropython/webrepl этого GitHub-репозитория].
 +
 +
До подключения к WebREPL вы должны задать пароль, а затем включить WebREPL через обычное последовательное соединение. Сначала – в первых версиях порта MicroPython для ESP8266 – WebREPL автоматически включался при загрузке, чтобы пользователь мог задать пароль по WiFi при первом подключении, но со временем WebREPL стал популярным, поэтому в целях безопасности первоначальная настройка теперь происходит через кабельное подключение:
 +
 +
<syntaxhighlight lang="python" enclose="div">
 +
import webrepl_setup
 +
</syntaxhighlight>
 +
 +
Следуйте инструкциям и подсказкам на экране. Чтобы изменения вступили в силу, устройство надо будет перезагрузить.
 +
 +
Чтобы воспользоваться WebREPL, подключите свой компьютер к точке доступа ESP8266 (она будет называться «MicroPython-xxxxxx», где вместо «иксов» будут другие символы – более подробно читайте в предыдущем разделе). Если вы уже перенастроили свой ESP8266 на подключение к роутеру, то эту часть можно пропустить.
 +
 +
Теперь, когда вы в одной сети с ESP8266, кликните на кнопку «Connect» (если вы подключаетесь через роутер, вам может понадобиться сменить IP-адрес, но по умолчанию при подключении к точке доступа ESP8266 IP-адрес будет правильным).
 +
 +
Если подключение будет выполнено успешно, система попросит ввести пароль.
 +
 +
Когда вы впишите пароль, заданный на этапе выше, нажмите Enter еще раз, и в командной строке должны появиться три стрелочки >>>. Теперь вы можете писать команды Python!
 +
 +
==Использование REPL==
 +
 +
Итак, теперь, когда у вас есть доступ к командной строке, можно начинать экспериментировать! Все, что вы впишете в REPL, будет выполнено после нажатия клавиши Enter. MicroPython запустит написанный вами код и напечатает результат (если таковой предусмотрен). Если во введенном вами тексте будет ошибка, то эта ошибка тоже будет напечатана.
 +
 +
Попробуйте вписать в командную строку следующее:
 +
 +
<syntaxhighlight lang="python" enclose="div">
 +
>>> print('привет esp8266!')
 +
привет esp8266!
 +
</syntaxhighlight>
 +
 +
Стрелочки >>> вам писать не нужно. Они нужны для того, чтобы показать, что вы можете вписать после них какой-то текст. Строчка ниже – это, что пишет в ответ само устройство. В итоге, когда вы впишете текст print("привет esp8266!") и нажмете Enter, ответ на экране должен выглядеть точно так же, как в примере выше.
 +
 +
Если вы уже немного знаете Python, можете попробовать базовые команды. Например:
 +
 +
<syntaxhighlight lang="python" enclose="div">
 +
>>> 1 + 2
 +
3
 +
>>> 1 / 2
 +
0.5
 +
>>> 12**34
 +
4922235242952026704037113243122008064
 +
</syntaxhighlight>
 +
 +
Если у вашей платы к контакту GPIO2 подключен светодиод (как у модулей ESP-12), вы можете включить/выключить его при помощи следующего кода:
 +
 +
<syntaxhighlight lang="python" enclose="div">
 +
>>> import machine
 +
>>> pin = machine.Pin(2, machine.Pin.OUT)
 +
>>> pin.on()
 +
>>> pin.off()
 +
</syntaxhighlight>
 +
 +
Учтите, что метод on(), несмотря на название, может выключить светодиод, а off() – наоборот, включить. Это зависит от того, как именно светодиод подключен к плате. Для решения этой проблемы в MicroPython есть класс machine.Signal.
 +
 +
===Редактирование строки===
 +
 +
Вы можете отредактировать строку, которую печатаете, двигая курсор с помощью клавиш-стрелок «Влево» и «Вправо», а также с помощью клавиш Delete и Backspace. Кроме того, нажатие на Home или Ctrl+A передвинет курсор на начало строки, а нажатие на End или Ctrl+E – в ее конец.
 +
 +
===История ввода===
 +
 +
REPL помнит номера строчек, введенных вами ранее (на ESP8266 – до 8). Чтобы вызвать предыдущие строчки, используйте клавиши-стрелки «Вверх» и «Вниз».
 +
 +
===Автозаполнение с помощью клавиши Tab===
 +
 +
Нажатие на клавишу Tab выполнит автозаполнение текущего слова. Это может быть полезно при поиске функций и методов, которые есть у модуля или объекта. Попробуйте, к примеру, написать «ma», а затем нажмите на Tab. Автозаполнение должно показать слово «machine» (при условии, что вы импортировали модуль machine как в примере выше). Затем впишите «.» и снова нажмите на Tab, чтобы увидеть список всех функций, которые есть у модуля machine.
 +
 +
===Операторы из нескольких строчек и автоматический отступ ===
 +
 +
Для создания некоторых операторов Python может понадобиться больше одной строчки. В этом случае приглашение ввода в командной строке изменится на три точки ..., а курсор выполнит автоматический отступ на нужное количество символов, чтобы вы сразу могли писать новую строчку кода. Попробуйте это, задав следующую функцию:
 +
 +
<syntaxhighlight lang="python" enclose="div">
 +
>>> def toggle(p):
 +
...    p.value(not p.value())
 +
...
 +
...
 +
...
 +
>>>
 +
</syntaxhighlight>
 +
 +
В примере выше вам надо три раза подряд нажать Enter, чтобы завершить этот составной оператор (это три строчки, в которых есть только точки). Еще один способ завершить создание составного оператора – это нажать Backspace, чтобы перейти в начало строки, а затем Enter. (Если вы сделали что-то не так и хотите выйти из этого режима, нажмите Ctrl+C; все строчки будут проигнорированы).
 +
 +
Функция, которую вы задали выше, переключает состояние контакта. Объект pin, который вы создали ранее, все еще должен существовать (если нет, то пересоздайте его), так что вы теперь, используя эту функцию и этот объект, можете включать/выключать светодиод:
 +
 +
<syntaxhighlight lang="python" enclose="div">
 +
>>> toggle(pin)
 +
</syntaxhighlight>
 +
 +
Теперь давайте зациклим включение/выключение светодиода (если у вас нет светодиода, вместо него подойдет печать какого-то текста – достаточно, чтобы понять, в чем тут суть):
 +
 +
<syntaxhighlight lang="python" enclose="div">
 +
>>> import time
 +
>>> while True:
 +
...    toggle(pin)
 +
...    time.sleep_ms(500)
 +
...
 +
...
 +
...
 +
>>>
 +
</syntaxhighlight>
 +
 +
Этот блок кода будет переключать светодиод с частотой 1 Гц (полсекунды – в состоянии «вкл», полсекунды – в состоянии «выкл»). Чтобы остановить включение/выключение, нажмите Ctrl+C, что вызовет исключение «KeyboardInterrupt» и прервет цикл.
 +
 +
В модуле time есть полезные функции для выполнения задержек и синхронизации действий. Чтобы найти эти функции, используйте Tab-автозаполнение, и поэкспериментируйте с ними, чтобы понять, как они работают.
 +
 +
===Режим вставки===
 +
 +
Нажав клавиши Ctrl+E, вы перейдете в специальный режим вставки. Он позволяет копировать и вставлять большие куски текста в REPL. После нажатия на Ctrl+E в командной строке появятся подсказки и приглашение для ввода данных в виде <nowiki>===</nowiki>, используемое в режиме вставки.
 +
 +
<syntaxhighlight lang="python" enclose="div">
 +
paste mode; Ctrl-C to cancel, Ctrl-D to finish
 +
===
 +
</syntaxhighlight>
 +
 +
Теперь вы можете вставить (или напечатать) сюда свой текст. Помните, что в режиме вставки не работают ни специальные клавиши (вроде Tab или Backspace), ни команды – текст принимается как есть. Чтобы закончить ввод текста и выполнить его, нажмите Ctrl+D.
 +
 +
===Другие управляющие команды===
 +
Есть еще четыре управляющие команды:
 +
* Ctrl+A на пустой линии – вы перейдете в режим «удаленного скрипта» («raw REPL»). Он похож на режим вставки из предыдущего раздела, но без эхо-отображения (т.е. без обратной пересылки введенных символов).
 +
* Ctrl+B на пустой линии – вы перейдете в режим обычного использования REPL.
 +
* Ctrl+C отменяет все введенные данные или прерывает цикл, работающий в данный момент.
 +
* Ctrl+D на пустой линии – выполняет мягкую перезагрузку.
 +
Обратите внимание, что Ctrl+A и Ctrl+D в WebREPL не работают.
  
 
<syntaxhighlight lang="python" enclose="div">
 
<syntaxhighlight lang="python" enclose="div">

Версия 11:54, 1 июля 2020

Перевод: Максим Кузьмин (Cubewriter) Контакты:</br>* Skype: cubewriter</br>* E-mail: cubewriter@gmail.com</br>* Максим Кузьмин на freelance.ru
Проверка/Оформление/Редактирование: Мякишев Е.А.


Где найти и как использовать командную строку MicroPython REPL[1]

REPL расшифровывается как «Read Evaluate Print Loop», что можно перевести как «цикл "чтение-вычисление-вывод"» – так называется интерактивная командная строка MicroPython, которую можно использовать при работе с ESP8266. REPL – это самый простой способ для тестирования вашего кода и запуска команд.

Есть два способа получить доступ к REPL: по кабельному соединению через последовательный UART-порт или по WiFi.

REPL через последовательный порт

REPL всегда доступна через последовательный порт UART0, работа которого осуществляется через контакты GPIO1 (TX) и GPIO3 (RX). Скорость передачи данных при работе с REPL115200 бод. Если у вашей платы есть преобразователь USB-Serial, то вы сможете получить доступ к REPL прямо с ПК. В противном случае вам надо будет коммуницировать через UART.

Чтобы получить доступ к REPL через преобразователь USB-Serial, вам нужна будет программа для эмулирования терминала. На Windows для этого есть хорошая программа TeraTerm, на Mac можно использовать встроенную программу screen, а на Linux есть picocom и minicom. Разумеется, есть множество других программ-терминалов, так что можете пользоваться той, что вам нравится.

К примеру, на Linux можно запустить:

picocom /dev/ttyUSB0 -b115200

Когда соединение через последовательный порт будет установлено, вы можете проверить его, несколько раз нажав Enter. Вы должны увидеть командную строку Python REPL, обозначенную с помощью >>>.

WebREPL – командная строка через WiFi

WebREPL позволяет использовать командную строку Python по WiFi через браузер. Поддерживаются последние версии Firefox и Chrome.

Для вашего удобства клиент WebREPL размещен на сайте MicroPython. Или же вы можете установить его локально из этого GitHub-репозитория.

До подключения к WebREPL вы должны задать пароль, а затем включить WebREPL через обычное последовательное соединение. Сначала – в первых версиях порта MicroPython для ESP8266 – WebREPL автоматически включался при загрузке, чтобы пользователь мог задать пароль по WiFi при первом подключении, но со временем WebREPL стал популярным, поэтому в целях безопасности первоначальная настройка теперь происходит через кабельное подключение:

import webrepl_setup

Следуйте инструкциям и подсказкам на экране. Чтобы изменения вступили в силу, устройство надо будет перезагрузить.

Чтобы воспользоваться WebREPL, подключите свой компьютер к точке доступа ESP8266 (она будет называться «MicroPython-xxxxxx», где вместо «иксов» будут другие символы – более подробно читайте в предыдущем разделе). Если вы уже перенастроили свой ESP8266 на подключение к роутеру, то эту часть можно пропустить.

Теперь, когда вы в одной сети с ESP8266, кликните на кнопку «Connect» (если вы подключаетесь через роутер, вам может понадобиться сменить IP-адрес, но по умолчанию при подключении к точке доступа ESP8266 IP-адрес будет правильным).

Если подключение будет выполнено успешно, система попросит ввести пароль.

Когда вы впишите пароль, заданный на этапе выше, нажмите Enter еще раз, и в командной строке должны появиться три стрелочки >>>. Теперь вы можете писать команды Python!

Использование REPL

Итак, теперь, когда у вас есть доступ к командной строке, можно начинать экспериментировать! Все, что вы впишете в REPL, будет выполнено после нажатия клавиши Enter. MicroPython запустит написанный вами код и напечатает результат (если таковой предусмотрен). Если во введенном вами тексте будет ошибка, то эта ошибка тоже будет напечатана.

Попробуйте вписать в командную строку следующее:

>>> print('привет esp8266!')
привет esp8266!

Стрелочки >>> вам писать не нужно. Они нужны для того, чтобы показать, что вы можете вписать после них какой-то текст. Строчка ниже – это, что пишет в ответ само устройство. В итоге, когда вы впишете текст print("привет esp8266!") и нажмете Enter, ответ на экране должен выглядеть точно так же, как в примере выше.

Если вы уже немного знаете Python, можете попробовать базовые команды. Например:

>>> 1 + 2
3
>>> 1 / 2
0.5
>>> 12**34
4922235242952026704037113243122008064

Если у вашей платы к контакту GPIO2 подключен светодиод (как у модулей ESP-12), вы можете включить/выключить его при помощи следующего кода:

>>> import machine
>>> pin = machine.Pin(2, machine.Pin.OUT)
>>> pin.on()
>>> pin.off()

Учтите, что метод on(), несмотря на название, может выключить светодиод, а off() – наоборот, включить. Это зависит от того, как именно светодиод подключен к плате. Для решения этой проблемы в MicroPython есть класс machine.Signal.

Редактирование строки

Вы можете отредактировать строку, которую печатаете, двигая курсор с помощью клавиш-стрелок «Влево» и «Вправо», а также с помощью клавиш Delete и Backspace. Кроме того, нажатие на Home или Ctrl+A передвинет курсор на начало строки, а нажатие на End или Ctrl+E – в ее конец.

История ввода

REPL помнит номера строчек, введенных вами ранее (на ESP8266 – до 8). Чтобы вызвать предыдущие строчки, используйте клавиши-стрелки «Вверх» и «Вниз».

Автозаполнение с помощью клавиши Tab

Нажатие на клавишу Tab выполнит автозаполнение текущего слова. Это может быть полезно при поиске функций и методов, которые есть у модуля или объекта. Попробуйте, к примеру, написать «ma», а затем нажмите на Tab. Автозаполнение должно показать слово «machine» (при условии, что вы импортировали модуль machine как в примере выше). Затем впишите «.» и снова нажмите на Tab, чтобы увидеть список всех функций, которые есть у модуля machine.

Операторы из нескольких строчек и автоматический отступ

Для создания некоторых операторов Python может понадобиться больше одной строчки. В этом случае приглашение ввода в командной строке изменится на три точки ..., а курсор выполнит автоматический отступ на нужное количество символов, чтобы вы сразу могли писать новую строчку кода. Попробуйте это, задав следующую функцию:

>>> def toggle(p):
...    p.value(not p.value())
...
...
...
>>>

В примере выше вам надо три раза подряд нажать Enter, чтобы завершить этот составной оператор (это три строчки, в которых есть только точки). Еще один способ завершить создание составного оператора – это нажать Backspace, чтобы перейти в начало строки, а затем Enter. (Если вы сделали что-то не так и хотите выйти из этого режима, нажмите Ctrl+C; все строчки будут проигнорированы).

Функция, которую вы задали выше, переключает состояние контакта. Объект pin, который вы создали ранее, все еще должен существовать (если нет, то пересоздайте его), так что вы теперь, используя эту функцию и этот объект, можете включать/выключать светодиод:

>>> toggle(pin)

Теперь давайте зациклим включение/выключение светодиода (если у вас нет светодиода, вместо него подойдет печать какого-то текста – достаточно, чтобы понять, в чем тут суть):

>>> import time
>>> while True:
...     toggle(pin)
...     time.sleep_ms(500)
...
...
...
>>>

Этот блок кода будет переключать светодиод с частотой 1 Гц (полсекунды – в состоянии «вкл», полсекунды – в состоянии «выкл»). Чтобы остановить включение/выключение, нажмите Ctrl+C, что вызовет исключение «KeyboardInterrupt» и прервет цикл.

В модуле time есть полезные функции для выполнения задержек и синхронизации действий. Чтобы найти эти функции, используйте Tab-автозаполнение, и поэкспериментируйте с ними, чтобы понять, как они работают.

Режим вставки

Нажав клавиши Ctrl+E, вы перейдете в специальный режим вставки. Он позволяет копировать и вставлять большие куски текста в REPL. После нажатия на Ctrl+E в командной строке появятся подсказки и приглашение для ввода данных в виде ===, используемое в режиме вставки.

paste mode; Ctrl-C to cancel, Ctrl-D to finish
===

Теперь вы можете вставить (или напечатать) сюда свой текст. Помните, что в режиме вставки не работают ни специальные клавиши (вроде Tab или Backspace), ни команды – текст принимается как есть. Чтобы закончить ввод текста и выполнить его, нажмите Ctrl+D.

Другие управляющие команды

Есть еще четыре управляющие команды:

  • Ctrl+A на пустой линии – вы перейдете в режим «удаленного скрипта» («raw REPL»). Он похож на режим вставки из предыдущего раздела, но без эхо-отображения (т.е. без обратной пересылки введенных символов).
  • Ctrl+B на пустой линии – вы перейдете в режим обычного использования REPL.
  • Ctrl+C отменяет все введенные данные или прерывает цикл, работающий в данный момент.
  • Ctrl+D на пустой линии – выполняет мягкую перезагрузку.

Обратите внимание, что Ctrl+A и Ctrl+D в WebREPL не работают.

<syntaxhighlight lang="python" enclose="div">

См.также

Внешние ссылки