Interacció amb SiPy1.0r de pycom

De things.cat
Salta a: navegació, cerca

Introducció

Esquemàtic de la placa de proves IoT-ttnCat

Connexió bàsica

Distribució de pins

Després de prémer el botó de reset:

rst:0x1 (POWERON_RESET),boot:0x3f (SPI_FAST_FLASH_BOOT)
ets Jun  8 2016 00:22:57
rst:0x10 (RTCWDT_RTC_RESET),boot:0x3f (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0x00
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:QIO, clock div:2
load:0x3fff9010,len:8
load:0x3fff9018,len:248
load:0x40078000,len:4056
load:0x4009fc00,len:920
entry 0x4009fde4
I (1577) wifi: wifi firmware version: 2a22b2d
I (1593) wifi: pp_task_hdl : 3ffd6b74, prio:23, stack:8192
I (1593) wifi: Init lldesc rx mblock:10
I (1593) wifi: Init lldesc rx ampdu len mblock:7
I (1595) wifi: Init lldesc rx ampdu entry mblock:4
I (1600) wifi: sleep disable
I (2588) wifi: frc2_timer_task_hdl:3ffdcbc4, prio:22, stack:2048
I (2612) wifi: mode : softAP (24:0a:c4:00:e3:81)
MicroPython v1.8.6-493-g99ac80fe on 2017-03-03; SiPy with ESP32
Type "help()" for more information.
>>> help()
Welcome to MicroPython!
For online help please visit http://micropython.org/help/.
For further help on a specific object, type help(obj)
>>> from network import Sigfox
>>> import socket
>>> import ubinascii
>>> sigfox = Sigfox(mode=Sigfox.SIGFOX, rcz=Sigfox.RCZ1)
>>> sigfox.mac()
b'p\xb3\xd5I\x99\n\xfcF'
>>> sigfox.id()
b'\x00M*]'
>>> sigfox.pac()
b'\x93n\xf7\x10\x01\xc8&\x9d'
>>> ubinascii.hexlify(sigfox.mac())
b'70b3d549990afc46'
>>> ubinascii.hexlify(sigfox.id())
b'004d2a5d'
>>> ubinascii.hexlify(sigfox.pac())
b'936ef71001c8269d'
>>>

Instruccions de micropython específiques per a SiPy de pycom

Pujar programes

Dins del sistema d'arxius del SiPy hi ha dos arxius clau: boot.py i main.py

L'arxiu boot.py, si existeix, s'executa després d'un reset. És el primer que fa el sistema. És el lloc ideal per a connectar el dispositiu a una xarxa sense fils i definir quins perifèrics estan connectats i com.

L'arxiu main.py, si existeix, s'executa tot just després d'acabar l'execució de boot.py. És el programa principal.

Explicació del bootloader i safe boot

boot.py original:

# boot.py -- run on boot-up
import os
from machine import UART
uart = UART(0, 115200)
os.dupterm(uart)

main.py original:

# main.py -- put your code here!

Mode bootloader

Per a posar la placa IoT-ttnCat em mode bootloader canvieu el pont present a LOW LEVEL BOOTLOADER de la posició LOW a la posició LEVEL.

Mode safe boot

Per a posar la placa IoT-ttnCat em mode safe boot canvieu el pont present a SAFE BOOT de la posició SAFE a la posició BOOT.

Fent servir FTP per a pujar programes

Quan el dispositiu és nou, o en mode safe boot, el dispositiu fa de punt d'accés (podeu revisar les xarxes sense fils i hi trobareu una xarxa amb l'SSID similar a sipy-wlan-e380. Feu servir com a contrasenya de connexió www.pycom.io).

Un cop us hi connecteu al punt d'accés del dispositiu hi podeu accedir emprant la URL ftp://192.168.4.1, per exemple des del navegador d'arxius de Debian, i llur nom d'usuari és micro i llur contrasenya python.

Explicació de l'FTP a pycom

I2C

Imatge de la distribució de pins

SDA: GPIO12

SCL: GPIO13

gist de github per a fer escaneig de dispositius I2C

>>> from machine import I2C
>>> i2c = I2C(0, I2C.MASTER, baudrate=100000)
>>> devices = i2c.scan()
>>> len(devices)
2
>>> print (devices)
[60, 118]
>>> hex(devices[0])
'0x3c'
>>> hex(devices[1])
'0x76'
>>>

Sensor BME280

MicroPython: BME280 with ESP32 and ESP8266 (Pressure, Temperature, Humidity)

Pantalla SSD1306

OLED display SSD1306 in MicroPython, example with a I2C digital barometer BME280 (or BMP180)

Biblioteques emprades a aquest projecte:

Sensor BME280

Pantalla SSD1306

Exemple d'ús

Connecteu-vos al punt d'accés del SiPy (exemple d'SSID: sipy-wlan-e380 i contrasenya www.pycom.io). Mitjançant el navegador d'arxius de Debian accediu a la carpeta de biblioteques ftp://192.168.4.1/flash/lib i copieu la biblioteca bme280.py.

Des del terminal podeu provar la biblioteca bme280.py:

>>> from machine import I2C
>>> import machine, time, bme280
>>> i2c = I2C(0, I2C.MASTER, baudrate=100000)
>>> bme = bme280.BME280(i2c=i2c,address=0x76)
>>> temp,pa,hum = bme.values
>>> print(temp)
24.15C
>>> print(pa)
1008.67hPa
>>> print(hum)
49.87%