MicroPython:Платы/WiPy/Краткое руководство по плате WiPy: различия между версиями
Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Myagkij (обсуждение | вклад) (Новая страница: «{{MicroPython/Панель перехода}} {{Перевод от Сubewriter}} {{Myagkij-редактор}} <syntaxhighlight lang="python" enclose="div">...») |
Myagkij (обсуждение | вклад) Нет описания правки |
||
Строка 3: | Строка 3: | ||
{{Myagkij-редактор}} | {{Myagkij-редактор}} | ||
=Краткое руководство по плате WiPy<ref>[http://docs.micropython.org/en/latest/wipy/quickref.html docs.micropython.org - Quick reference for the WiPy]</ref>= | |||
[[File:WiPy pinout.png|center]] | |||
Материалы ниже – краткое руководство по [[CC3200]]/[[WiPy]]. Если вы только начали работать с этой платой, советуем сначала ознакомиться с этими статьями: | |||
* [http://docs.micropython.org/en/latest/wipy/general.html Общая информация о WiPy] | |||
* [http://docs.micropython.org/en/latest/wipy/tutorial/index.html Руководства и примеры работы с WiPy] | |||
== Общее управление платой (включая режимы сна) == | |||
См. модуль [http://docs.micropython.org/en/latest/library/machine.html#module-machine machine]. | |||
<syntaxhighlight lang="python" enclose="div"> | <syntaxhighlight lang="python" enclose="div"> | ||
import machine | |||
help(machine) # показываем все элементы модуля «machine» | |||
machine.freq() # считываем частоту процессора | |||
machine.unique_id() # возвращаем уникальный 6-байтный ID платы | |||
# (MAC-адрес WiPy) | |||
machine.idle() # средняя сила тока снижается примерно до 12 мА, | |||
# любое прерывание пробудит плату | |||
machine.lightsleep() # все, кроме «WLAN», будет выключено | |||
# (средняя сила тока ~950 мкА); | |||
# пробуждается от «Pin», «RTC» или «WLAN» | |||
machine.deepsleep() # режим глубокого сна, | |||
# микроконтроллер будет запускаться от сброса; | |||
# пробуждается от «Pin» и «RTC» | |||
</syntaxhighlight> | |||
==Контакты и GPIO== | |||
См. класс [http://docs.micropython.org/en/latest/library/machine.Pin.html#machine-pin machine.Pin]. | |||
<syntaxhighlight lang="python" enclose="div"> | |||
from machine import Pin | |||
# инициализируем GP2 в режиме GPIO (alt=0) | |||
# и делаем его выходным контактом: | |||
p_out = Pin('GP2', mode=Pin.OUT) | |||
p_out.value(1) | |||
p_out.value(0) | |||
p_out.toggle() | |||
p_out(True) | |||
# делаем GP1 входным контактом с включенным подтягивающим резистором: | |||
p_in = Pin('GP1', mode=Pin.IN, pull=Pin.PULL_UP) | |||
p_in() # считываем значение, «0» или «1» | |||
</syntaxhighlight> | |||
==Таймеры== | |||
См. класс [http://docs.micropython.org/en/latest/library/machine.TimerWiPy.html#machine-timerwipy machine.TimerWiPy] и класс [http://docs.micropython.org/en/latest/library/machine.Pin.html#machine-pin machine.Pin]. ID таймера может быть значение от «0» до «3». | |||
<syntaxhighlight lang="python" enclose="div"> | |||
from machine import Timer | |||
from machine import Pin | |||
tim = Timer(0, mode=Timer.PERIODIC) | |||
tim_a = tim.channel(Timer.A, freq=1000) | |||
tim_a.freq(5) # 5 Гц | |||
p_out = Pin('GP2', mode=Pin.OUT) | |||
tim_a.irq(trigger=Timer.TIMEOUT, handler=lambda t: p_out.toggle()) | |||
</syntaxhighlight> | |||
==ШИМ (широтно-импульсная модуляция)== | |||
См. [http://docs.micropython.org/en/latest/library/machine.Pin.html#machine-pin machine.Pin] и [http://docs.micropython.org/en/latest/library/machine.Timer.html#machine-timer machine.Timer]. | |||
<syntaxhighlight lang="python" enclose="div"> | |||
from machine import Timer | |||
# таймер 1 в ШИМ-режиме, и разрядность должна быть 16 бит: | |||
tim = Timer(1, mode=Timer.PWM, width=16) | |||
# включаем канал А на 1 КГц с коэффициентом заполнения 50.55%: | |||
tim_a = tim.channel(Timer.A, freq=1000, duty_cycle=5055) | |||
</syntaxhighlight> | |||
==АЦП (аналогово-цифровое преобразование)== | |||
См. [http://docs.micropython.org/en/latest/library/machine.ADCWiPy.html#machine-adcwipy machine.ADCWiPy]. | |||
<syntaxhighlight lang="python" enclose="div"> | |||
from machine import ADC | |||
adc = ADC() | |||
apin = adc.channel(pin='GP3') | |||
apin() # считываем значение (0-4095) | |||
</syntaxhighlight> | |||
==UART (последовательная шина)== | |||
См. [http://docs.micropython.org/en/latest/library/machine.UART.html#machine-uart machine.UART]. | |||
<syntaxhighlight lang="python" enclose="div"> | |||
from machine import UART | |||
uart = UART(0, baudrate=9600) | |||
uart.write('привет') | |||
uart.read(5) # считываем до 5 байтов | |||
</syntaxhighlight> | |||
==Шина SPI== | |||
См. [http://docs.micropython.org/en/latest/library/machine.SPI.html#machine-spi machine.SPI]. | |||
<syntaxhighlight lang="python" enclose="div"> | |||
from machine import SPI | |||
# настраиваем ведущее SPI-устройство на 2 МГц: | |||
spi = SPI(0, SPI.MASTER, baudrate=200000, polarity=0, phase=0) | |||
spi.write('привет') | |||
spi.read(5) # получаем 5 байтов на шину | |||
rbuf = bytearray(5) | |||
spi.write_readinto('привет', rbuf) # отправляем и получаем 5 байтов | |||
</syntaxhighlight> | |||
==Шина I2C== | |||
См. [http://docs.micropython.org/en/latest/library/machine.I2C.html#machine-i2c machine.I2C]. | |||
<syntaxhighlight lang="python" enclose="div"> | |||
from machine import I2C | |||
# configure the I2C bus | |||
i2c = I2C(baudrate=100000) | |||
i2c.scan() # возвращаем список адресов | |||
# ведомых устройств | |||
i2c.writeto(0x42, 'привет') # отправляем 5 байтов | |||
# ведомому устройству | |||
# с адресом «0x42» | |||
i2c.readfrom(0x42, 5) # получаем 5 байтов | |||
# от ведомого устройства | |||
i2c.readfrom_mem(0x42, 0x10, 2) # считываем два байта | |||
# с ведомого устройства | |||
# с адресом «0x42», | |||
# с адреса в памяти «0x10» | |||
i2c.writeto_mem(0x42, 0x10, 'xy') # записываем 2 байта | |||
# на ведомое устройство | |||
# с адресом «0x42» | |||
# в адрес в памяти «0x10» | |||
</syntaxhighlight> | |||
==Сторожевой таймер (WDT)== | |||
См. [http://docs.micropython.org/en/latest/library/machine.WDT.html#machine-wdt machine.WDT]. | |||
<syntaxhighlight lang="python" enclose="div"> | |||
from machine import WDT | |||
# включаем WDT-таймер с таймаутом 5 секунд (минимум – 1 секунда): | |||
wdt = WDT(timeout=5000) | |||
wdt.feed() | |||
</syntaxhighlight> | |||
==Часы реального времени (RTC)== | |||
См. [http://docs.micropython.org/en/latest/library/machine.RTC.html#machine-rtc machine.RTC]. | |||
<syntaxhighlight lang="python" enclose="div"> | |||
from machine import RTC | |||
# инициализируем с датой и временем по умолчанию: | |||
rtc = RTC() | |||
# инициализируем со своими датой и временем: | |||
rtc = RTC(datetime=(2015, 8, 29, 9, 0, 0, 0, None)) | |||
print(rtc.now()) | |||
def alarm_handler (rtc_o): | |||
pass | |||
# выполняем неблокирующие операции; | |||
# печать предупреждающих сообщений | |||
# во время прерывания через Telnet невозможна, | |||
# только через UART | |||
# создаем RTC-будильник, который сработает через 5 секунд: | |||
rtc.alarm(time=5000, repeat=False) | |||
# включаем RTC-прерывания: | |||
rtc_i = rtc.irq(trigger=RTC.ALARM0, handler=alarm_handler, wake=machine.SLEEP) | |||
# переходим в экономичный режим | |||
# в ожидании срабатывания будильника и пробуждения | |||
machine.lightsleep() | |||
</syntaxhighlight> | |||
==SD-карта== | |||
См. [http://docs.micropython.org/en/latest/library/machine.SD.html#machine-sd machine.SD]. | |||
<syntaxhighlight lang="python" enclose="div"> | |||
from machine import SD | |||
import os | |||
# задаем контакты для тактовой частоты, CMD и передачи данных: | |||
sd = SD(pins=('GP10', 'GP11', 'GP15')) | |||
# или используем настройки для платы расширения по умолчанию: | |||
sd = SD() | |||
os.mount(sd, '/sd') | |||
</syntaxhighlight> | |||
==WLAN (WiFi)== | |||
См. [http://docs.micropython.org/en/latest/library/network.WLAN.html#network-wlan network.WLAN] и [http://docs.micropython.org/en/latest/library/machine.html#module-machine machine]. | |||
<syntaxhighlight lang="python" enclose="div"> | |||
import machine | |||
from network import WLAN | |||
# настраиваем WLAN-подсистему в режим станции | |||
# (по умолчанию она работает в режиме точки доступа): | |||
wlan = WLAN(mode=WLAN.STA) | |||
# задаем фиксированные IP-настройки: | |||
wlan.ifconfig(config=('192.168.0.107', '255.255.255.0', '192.168.0.1', '8.8.8.8')) | |||
wlan.scan() # сканируем доступные сети | |||
wlan.connect(ssid='mynetwork', auth=(WLAN.WPA2, 'mynetworkkey')) | |||
while not wlan.isconnected(): | |||
pass | |||
print(wlan.ifconfig()) | |||
# настраиваем пробуждение WLAN: | |||
wlan.irq(trigger=WLAN.ANY_EVENT, wake=machine.SLEEP) | |||
# переводим плату в режим сна: | |||
machine.lightsleep() | |||
# теперь подключаемся к FTP- или Telnet-серверу, и это разбудит WiPy | |||
</syntaxhighlight> | |||
==Telnet- и FTP-сервер== | |||
См. [http://docs.micropython.org/en/latest/wipy/general.html#network.Server network.Server]. | |||
<syntaxhighlight lang="python" enclose="div"> | |||
from network import Server | |||
# инициализируем сервер с новым пользователем, | |||
# паролем и таймаутом (в секундах): | |||
server = Server(login=('user', 'password'), timeout=60) | |||
server.timeout(300) # меняем таймаут | |||
server.timeout() # считываем таймаут | |||
server.isrunning() # проверяем, запущен ли сервер или нет | |||
</syntaxhighlight> | |||
==Светодиод сердцебиения== | |||
См. модуль [http://docs.micropython.org/en/latest/library/wipy.html#module-wipy wipy]. | |||
<syntaxhighlight lang="python" enclose="div"> | |||
import wipy | |||
wipy.heartbeat(False) # отключаем светодиод сердцебиения | |||
wipy.heartbeat(True) # включаем светодиод сердцебиения | |||
wipy.heartbeat() # считываем состояние светодиода сердцебиения | |||
</syntaxhighlight> | |||
=См.также= | =См.также= |
Версия от 20:57, 26 октября 2020
Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.
Краткое руководство по плате WiPy[1]
Материалы ниже – краткое руководство по CC3200/WiPy. Если вы только начали работать с этой платой, советуем сначала ознакомиться с этими статьями:
Общее управление платой (включая режимы сна)
См. модуль machine.
import machine
help(machine) # показываем все элементы модуля «machine»
machine.freq() # считываем частоту процессора
machine.unique_id() # возвращаем уникальный 6-байтный ID платы
# (MAC-адрес WiPy)
machine.idle() # средняя сила тока снижается примерно до 12 мА,
# любое прерывание пробудит плату
machine.lightsleep() # все, кроме «WLAN», будет выключено
# (средняя сила тока ~950 мкА);
# пробуждается от «Pin», «RTC» или «WLAN»
machine.deepsleep() # режим глубокого сна,
# микроконтроллер будет запускаться от сброса;
# пробуждается от «Pin» и «RTC»
Контакты и GPIO
См. класс machine.Pin.
from machine import Pin
# инициализируем GP2 в режиме GPIO (alt=0)
# и делаем его выходным контактом:
p_out = Pin('GP2', mode=Pin.OUT)
p_out.value(1)
p_out.value(0)
p_out.toggle()
p_out(True)
# делаем GP1 входным контактом с включенным подтягивающим резистором:
p_in = Pin('GP1', mode=Pin.IN, pull=Pin.PULL_UP)
p_in() # считываем значение, «0» или «1»
Таймеры
См. класс machine.TimerWiPy и класс machine.Pin. ID таймера может быть значение от «0» до «3».
from machine import Timer
from machine import Pin
tim = Timer(0, mode=Timer.PERIODIC)
tim_a = tim.channel(Timer.A, freq=1000)
tim_a.freq(5) # 5 Гц
p_out = Pin('GP2', mode=Pin.OUT)
tim_a.irq(trigger=Timer.TIMEOUT, handler=lambda t: p_out.toggle())
ШИМ (широтно-импульсная модуляция)
См. machine.Pin и machine.Timer.
from machine import Timer
# таймер 1 в ШИМ-режиме, и разрядность должна быть 16 бит:
tim = Timer(1, mode=Timer.PWM, width=16)
# включаем канал А на 1 КГц с коэффициентом заполнения 50.55%:
tim_a = tim.channel(Timer.A, freq=1000, duty_cycle=5055)
АЦП (аналогово-цифровое преобразование)
См. machine.ADCWiPy.
from machine import ADC
adc = ADC()
apin = adc.channel(pin='GP3')
apin() # считываем значение (0-4095)
UART (последовательная шина)
См. machine.UART.
from machine import UART
uart = UART(0, baudrate=9600)
uart.write('привет')
uart.read(5) # считываем до 5 байтов
Шина SPI
См. machine.SPI.
from machine import SPI
# настраиваем ведущее SPI-устройство на 2 МГц:
spi = SPI(0, SPI.MASTER, baudrate=200000, polarity=0, phase=0)
spi.write('привет')
spi.read(5) # получаем 5 байтов на шину
rbuf = bytearray(5)
spi.write_readinto('привет', rbuf) # отправляем и получаем 5 байтов
Шина I2C
См. machine.I2C.
from machine import I2C
# configure the I2C bus
i2c = I2C(baudrate=100000)
i2c.scan() # возвращаем список адресов
# ведомых устройств
i2c.writeto(0x42, 'привет') # отправляем 5 байтов
# ведомому устройству
# с адресом «0x42»
i2c.readfrom(0x42, 5) # получаем 5 байтов
# от ведомого устройства
i2c.readfrom_mem(0x42, 0x10, 2) # считываем два байта
# с ведомого устройства
# с адресом «0x42»,
# с адреса в памяти «0x10»
i2c.writeto_mem(0x42, 0x10, 'xy') # записываем 2 байта
# на ведомое устройство
# с адресом «0x42»
# в адрес в памяти «0x10»
Сторожевой таймер (WDT)
См. machine.WDT.
from machine import WDT
# включаем WDT-таймер с таймаутом 5 секунд (минимум – 1 секунда):
wdt = WDT(timeout=5000)
wdt.feed()
Часы реального времени (RTC)
См. machine.RTC.
from machine import RTC
# инициализируем с датой и временем по умолчанию:
rtc = RTC()
# инициализируем со своими датой и временем:
rtc = RTC(datetime=(2015, 8, 29, 9, 0, 0, 0, None))
print(rtc.now())
def alarm_handler (rtc_o):
pass
# выполняем неблокирующие операции;
# печать предупреждающих сообщений
# во время прерывания через Telnet невозможна,
# только через UART
# создаем RTC-будильник, который сработает через 5 секунд:
rtc.alarm(time=5000, repeat=False)
# включаем RTC-прерывания:
rtc_i = rtc.irq(trigger=RTC.ALARM0, handler=alarm_handler, wake=machine.SLEEP)
# переходим в экономичный режим
# в ожидании срабатывания будильника и пробуждения
machine.lightsleep()
SD-карта
См. machine.SD.
from machine import SD
import os
# задаем контакты для тактовой частоты, CMD и передачи данных:
sd = SD(pins=('GP10', 'GP11', 'GP15'))
# или используем настройки для платы расширения по умолчанию:
sd = SD()
os.mount(sd, '/sd')
WLAN (WiFi)
См. network.WLAN и machine.
import machine
from network import WLAN
# настраиваем WLAN-подсистему в режим станции
# (по умолчанию она работает в режиме точки доступа):
wlan = WLAN(mode=WLAN.STA)
# задаем фиксированные IP-настройки:
wlan.ifconfig(config=('192.168.0.107', '255.255.255.0', '192.168.0.1', '8.8.8.8'))
wlan.scan() # сканируем доступные сети
wlan.connect(ssid='mynetwork', auth=(WLAN.WPA2, 'mynetworkkey'))
while not wlan.isconnected():
pass
print(wlan.ifconfig())
# настраиваем пробуждение WLAN:
wlan.irq(trigger=WLAN.ANY_EVENT, wake=machine.SLEEP)
# переводим плату в режим сна:
machine.lightsleep()
# теперь подключаемся к FTP- или Telnet-серверу, и это разбудит WiPy
Telnet- и FTP-сервер
См. network.Server.
from network import Server
# инициализируем сервер с новым пользователем,
# паролем и таймаутом (в секундах):
server = Server(login=('user', 'password'), timeout=60)
server.timeout(300) # меняем таймаут
server.timeout() # считываем таймаут
server.isrunning() # проверяем, запущен ли сервер или нет
Светодиод сердцебиения
См. модуль wipy.
import wipy
wipy.heartbeat(False) # отключаем светодиод сердцебиения
wipy.heartbeat(True) # включаем светодиод сердцебиения
wipy.heartbeat() # считываем состояние светодиода сердцебиения