Esta wiki documenta os comandos que o firmware está preparado para receber através da porta serial.
Entende-se um comando por uma string (sequência de caracteres), enviada para a porta serial, com o seguinte formato:
comando,arg1,arg2,...,argN
onde arg1
, arg2
, ..., argN
são argumentos para o comando.
Enviando comandos para serial
-
1ª Opção: Monitor Serial da IDE do Arduino (acessível pelo botão
);
-
2ª Opção: Pelo terminal, fazendo-se
$ make serial >>> send('comando,arg1,arg2,...,argN')
ATENÇÃO! O símbolo
>>>
indica que você está dentro de um terminal Python. Os comandos da placa listados na próxima seção devem ser passados dentro de uma string para a funçãosend()
conforme ilustrado acima. Veja a seção final desta página sobre as vantagens de estar num ambiente Python.
Comandos para o firmware
Comando | Descrição |
---|---|
read,a1,a2,...,aN |
Solicita a leitura de um ou mais sensores. |
a1 , a2 , ..., aN devem ser nomes ou apelidos dos sensores. |
|
Retorna: r1,r2,...,rN (valores correspondentes da leitura dos N sensores) |
|
setrtc,Y,m,d,H,M,S |
Configura o relógio RTC_DS1307 (se presente) |
Y : ano, m : mês, d : dia, H : hora, M : minuto, S : segundo |
|
Retorna: done: Y-m-d H:M:S (hora configurada) |
|
listall |
Retorna uma lista de todos os sensores disponíveis e seus apelidos |
help |
Retorna uma lista dos comandos disponíveis |
Os sensores suportados oficialmente são:
Nome | Apelido | Medida | Unidade |
---|---|---|---|
DHT22_TEMP |
t |
tempertura | ºC |
DHT22_AH |
ah |
umidade relativa do ar | % |
BMP085_PRESSURE |
p |
pressão atmosférica | Pa |
LDR |
l |
luminosidade | u.a. (escala 0-100) |
RTC_DS1307 |
dt |
relógio | %Y-%m-%d %H:%M:%S |
Solicitando leituras
Por exemplo, podemos solicitar a leitura de temperatura, pressão e luminosidade de uma só vez como segue:
read,t,p,l
A resposta deverá ser algo como
24.5,101308,75.0
valores que interpretados juntamente com suas unidades indicam (lembre-se de que os computadores utilizam o ponto como separador decimal):
- 24.5 ºC de temperatura
- 101308 Pa de pressão atmosférica
- 75.0 % de luminosidade ambiente (escala de 0 a 100 %)
É possível passar tanto o nome do sensor, como seu apelido. Logo,
read,BMP085_PRESSURE
eread,p
são equivalentes.
OBS: No caso da leitura de sensores como
LDR
e oDHT22
, que não utilizam I2C, valores retornados podem parecer válidos mesmo que o sensor não esteja presente na placa!
RTC_DS1307
Configurando o relógio Exemplo:
setrtc,2015,6,30,7,28,41
Caso bem sucedido, a resposta deverá ser:
done: 2015-6-30 7:28:41
make serial
Explorando Esta seção é dedicada àqueles que optaram por enviar os comandos para a serial utilizando o terminal, via
$ make serial
>>> send('comando,arg1,arg2,...,argN')
Uma vez que você está dentro de um terminal Python, você poderá utilizar todo o poder dessa linguagem para manipular os valores retornados por send()
, salvá-los em arquivo, etc.
- Salve a string de resposta em uma variável
>>> r = send('read,t,p,l')
>>> type(r)
<class 'str'>
>>> r
'24.5,101308,75.0'
>>> send('read,l,ah')
'33.5,78.0'
>>> r = _ # o caracetere _ refere-se ao último valor recebido
>>> print(r)
33.5,78.0
- Sincronize o relógio da placa com o do sistema
>>> sync_rtc()
'done: 2015-09-02-16-55-11'
- Pegue a data do sistema (para quem não tem o
RTC_DS1307
presente na placa)
>>> from datetime import datetime
>>> r = send('read,t,ah,p,l') # lê todos os sensores, menos o RTC
>>> dt = datetime.now().strftime('%Y-%m-%d-%H-%M-%S') # pega data do sistema
>>> print(dt)
2015-07-17-15-23-12
>>> s = ','.join([dt, r]) # junta o dt com a resposta r da serial numa única string
>>> print(s)
2015-07-17-15-23-12,23.5,78.0,101450,89.4
- Salve a string lida em um arquivo CSV
>>> r = send('read,dt,p,t,ah,l') # lê todos sensores, incluindo o RTC
>>> SEP = '\t' # separador de valores (padrão é vírgula)
>>> with open('datalog.csv', 'a') as f:
... f.write(r.replace(',', SEP))
...
>>> # se tudo deu certo, um arquivo 'datalog.csv' deve ter sido criado na pasta local
>>> # saia do interpretador apertando CTRL + D
$ cat datalog.csv
2015-07-17-15-23-12 23.5 78.0 101450 89.4