MicroPython:Платы/WiPy/Краткое руководство по плате WiPy

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

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


Краткое руководство по плате WiPy[1]

WiPy pinout.png

Материалы ниже – краткое руководство по 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()       # считываем состояние светодиода сердцебиения

См.также

Ссылки на полезные ресурсы

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