Monday, April 30, 2018

Archlinux and Jenkins

To use jenkins in Archlinux is required change default java environment to Java 8.
sudo archlinux-java set java-8-openjdk/jre

Sunday, April 29, 2018

MBED how to fix: tools.utils.NotSupportedException: No linker script found.

You try to export the MBED project to Eclipse, but the following error raise:

    raise NotSupportedException("No linker script found.")
tools.utils.NotSupportedException: No linker script found.

To fix this problem append " --source $PWD" to command line.

mbed export -m NUCLEO_F429ZI -i eclipse_gcc_arm --source $PWD


Começando pelo exemplo oficial:
O código de exemplo oficial, funciona mas precisa de alguns ajustes.
Tanto na baudrate da porta serial,
como na ligação do SDcard para os pinos do SDMMC.
Depois de fazer as correções, o resto do workflow é o normal de qualquer projeto usando mbed.

O código corrigido pode ser encontrado em:

No conector CN8 vamos usar a interface SPI3 para cuidar do SDCARD.
PC_9 é o SPI CS  /  SDCARD D3
os pinos SDCARD: D2, D1, CD ficam desconectados.

sudo pip install mbed-cli --upgrade

mbed --version

mbed import mbed-os-example-sd-driver

cd mbed-os-example-sd-driver

mbed compile -m NUCLEO_F429ZI -t GCC_ARM

st-flash write ./BUILD/NUCLEO_F429ZI/GCC_ARM/mbed-os-example-sd-driver.bin 0x8000000

Minicom result

Exportar para Eclipse
mbed export -m NUCLEO_F429ZI -i eclipse_gcc_arm --source $PWD

Friday, June 16, 2017

how to use tplink wr1043 v1 qss button with openwrt 15.05

Create missing folder
mkdir -p /etc/hotplug.d/button
Create missing event debug handler /etc/hotplug.d/button/buttons
logger the button was $BUTTON and the action was $ACTION
Create missing button event handler /etc/hotplug.d/button/00-button
. /lib/
do_button () {
        local button
        local action
        local handler
        local min
        local max

        config_get button $1 button
        config_get action $1 action
        config_get handler $1 handler
        config_get min $1 min
        config_get max $1 max

        [ "$ACTION" = "$action" -a "$BUTTON" = "$button" -a -n "$handler" ] && {
                [ -z "$min" -o -z "$max" ] && eval $handler
                [ -n "$min" -a -n "$max" ] && {
                        [ $min -le $SEEN -a $max -ge $SEEN ] && eval $handler

config_load system
config_foreach do_button button
Configure buttons, so append at the end of /etc/system/config
config button
        option button 'wps'
        option action 'pressed'
        option handler 'echo 1 > /sys/class/leds/tp-link\:green\:qss/brightness'

config button
        option button 'wps'
        option action 'released'
        option handler 'echo 0 > /sys/class/leds/tp-link\:green\:qss/brightness'

Friday, October 28, 2016

Debian Jessie howto install Emdebian CrossToolchains

echo deb jessie main > /etc/apt/sources.list.d/crosstools.list
apt-get install -y curl
curl | sudo apt-key add -
sudo dpkg --add-architecture arm64
sudo dpkg --add-architecture armel
sudo dpkg --add-architecture armhf
sudo dpkg --add-architecture mips
sudo dpkg --add-architecture mipsel
sudo dpkg --add-architecture powerpc
sudo dpkg --add-architecture ppc64el
sudo apt-get update
sudo apt-get install crossbuild-essential-arm64
sudo apt-get install crossbuild-essential-armel
sudo apt-get install crossbuild-essential-armhf
sudo apt-get install crossbuild-essential-mipsel
sudo apt-get install crossbuild-essential-ppc64el
# I found problems with powerpc toolchain
sudo apt-get install crossbuild-essential-powerpc

# libc6:powerpc is broken 
Unpacking libc6:powerpc (2.19-18+deb8u6) ...
dpkg: error processing archive /var/cache/apt/archives/libc6_2.19-18+deb8u6_powerpc.deb (--unpack):
 trying to overwrite shared '/lib/', which is different from other instances of package libc6:powerpc

# remove broken powerpc toolchain
sudo apt-get remove libatomic1:powerpc libc6-dev:powerpc libgcc1:powerpc libgomp1:powerpc libstdc++6:powerpc crossbuild-essential-powerpc libgcc-4.9-dev:powerpc libstdc++-4.9-dev:powerpc g++-4.9-powerpc-linux-gnu gcc-4.9-powerpc-linux-gnu g++-powerpc-linux-gnu gcc-powerpc-linux-gnu

Sunday, October 16, 2016

How to fix - (EE) intel(0): sna_mode_shutdown_crtc: invalid state found on pipe 0, disabling CRTC:21

Screen sleep resulting in black screen of death (ubuntu 16.04 / intel i7 4790k / ga-z97x-ud3h-bk )
Possible fixes are:
1) restart X and loose current session
2) replace SNA with UXA and be happy foverer (best solution)

How to detect bug:
cat /var/log/Xorg.0.log | grep sna_mode_shutdown_crtc
(EE) intel(0): sna_mode_shutdown_crtc: invalid state found on pipe 0, disabling CRTC:21

How to fix:
Copy and save script above, and do:
sudo sh

Tuesday, September 6, 2016

telegram bot api

1) get an apikey from @botfather

2) check bot
curl -i -X GET{apikey}/getMe

3) get chatid 
curl -i -X GET{apikey}/getUpdates

4) be happy
curl -i -X GET{apikey}/sendMessage?chat_id={chatId}&text={someText}

Tuesday, August 23, 2016

Scaling up number of tcp/ip connections in linux

#as client
sysctl net.ipv4.ip_local_port_range="20000 65535"
sysctl net.ipv4.tcp_fin_timeout=30

#as server
ifconfig eth0 txqueuelen 10000
sysctl net.core.somaxconn=10240
sysctl net.core.netdev_max_backlog=10000
sysctl net.ipv4.tcp_max_syn_backlog=2560
echo 3000000 > /proc/sys/fs/nr_open
ulimit -n 2000000

Saturday, August 13, 2016

Allow 65536 threads with 65536 tcp ports listening

Thread-65532 tcp_port= 65531
Thread-65533 tcp_port= 65532
Thread-65534 tcp_port= 65533
Thread-65535 tcp_port= 65534
Thread-65536 tcp_port= 65535
active threads 62547

fix gitlab with letsencrypt certificate

Cannot register Go Runner because of x509: certificate signed by unknown authority If you are using a letsencrypt certificate the bug is trigged by curl. curl curl: (60) SSL certificate problem: unable to get local issuer certificate To fix this, add letsencrypt root certificates to system
sudo curl -o /usr/local/share/ca-certificates/isrgrootx1.crt
sudo curl -o /usr/local/share/ca-certificates/letsencryptauthorityx1.crt
sudo curl -o /usr/local/share/ca-certificates/letsencryptauthorityx2.crt
sudo curl -o /usr/local/share/ca-certificates/letsencryptx1.crt
sudo curl -o /usr/local/share/ca-certificates/letsencryptx2.crt
sudo curl -o /usr/local/share/ca-certificates/letsencryptx3.crt
sudo curl -o /usr/local/share/ca-certificates/letsencryptx4.crt
sudo dpkg-reconfigure ca-certificates
gitlab-ci-multi-runner register
Running in system-mode.

Please enter the gitlab-ci coordinator URL (e.g.
Please enter the gitlab-ci token for this runner:
Please enter the gitlab-ci description for this runner:
Please enter the gitlab-ci tags for this runner (comma separated):
Registering runner... succeeded                     runner=43242342
Please enter the executor: parallels, shell, ssh, virtualbox, docker+machine, docker-ssh+machine, docker, docker-ssh:
Please enter the default Docker image (eg. ruby:2.1):
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!

Wednesday, August 10, 2016

RabbitMQ server configure

# enable plugins and restart
rabbitmq-plugins enable rabbitmq_management
rabbitmq-plugins enable rabbitmq_mqtt
rabbitmq-plugins enable rabbitmq_web_stomp
rabbitmq-plugins enable rabbitmq_shovel
rabbitmq-plugins enable rabbitmq_management_visualiser 
rabbitmq-plugins enable rabbitmq_recent_history_exchange 
rabbitmq-plugins enable rabbitmq_top 
rabbitmq-plugins enable rabbitmq_tracing

# install and enable mqtt over websockets
cd /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.5/plugins
 rabbitmq-plugins enable rabbitmq_web_mqtt

/etc/init.d/rabbitmq-server restart

#change default passwrd
rabbitmqctl change_password guest s0m3p4ssw0rd

#configure new user
rabbitmqctl add_user newadmin s0m3p4ssw0rd
rabbitmqctl set_user_tags newadmin administrator
rabbitmqctl set_permissions -p / newadmin ".*" ".*" ".*"

Generate SSL/TLS chain

Edit /etc/rabbitmq/rabbitmq.config
   {ssl_listeners, [5671]},
    {ssl_options, [
     {cacertfile,           "/opt/rabbitmq-ssl/testca/cacert.pem"},
     {certfile,             "/opt/rabbitmq-ssl/server/cert.pem"},
     {keyfile,              "/opt/rabbitmq-ssl/server/key.pem"},
     {verify,               verify_peer},
     {fail_if_no_peer_cert, false}]}
    {default_user, <<"guest">>},
    {default_pass, <<"guest">>},
    {allow_anonymous, true},
    {tcp_listeners, [1883]},
    {ssl_listeners, [8883]}
Restart server
/etc/init.d/rabbitmq-server restart

#Test TLS
openssl s_client -connect -tls1

# Test MQTT
mosquitto_sub -h localhost -v -t '#'
mosquitto_pub -h localhost -t 'test' -m 'msg'

# Test MQTT with TLS
mosquitto_sub -h localhost -p 8883 -v -t '#' \
 --key /opt/rabbitmq-ssl/client/key.pem \
 --cert /opt/rabbitmq-ssl/client/cert.pem \
 --cafile /opt/rabbitmq-ssl/testca/cacert.pem
mosquitto_pub -h localhost -p 8883 -t 'test' -m 'msg' \
 --key /opt/rabbitmq-ssl/client/key.pem \
 --cert /opt/rabbitmq-ssl/client/cert.pem \
 --cafile /opt/rabbitmq-ssl/testca/cacert.pem

Sunday, July 31, 2016

Wednesday, July 20, 2016

openwrt set wan with random mac

uci set network.wan.macaddr=$(hexdump -n6 -e '6/1 ":%02X"' /dev/urandom | cut -f2- -d ":")
uci commit

Sunday, June 19, 2016

Xubuntu abnt2 keyboard

Session and startup -> add ->
setxkbmap -model pc105 -layout br -variant abnt2

phpMyAdmin - Error | The mbstring extension is missing. Ubuntu-16.04

Try using:
sudo apt-get install php-gettext
sudo phpenmod mcrypt 
sudo phpenmod mbstring 
sudo service apache2 restart

Tuesday, June 14, 2016

Chromium not starting as root in Debian

root@debian:~# chromium
[1:1:0614/] Check failed: sandbox::Credentials::MoveToNewUserNS(). 
#0 0x0000b0587b0d 
#1 0x0000b05a01c0 
#2 0x0000b4c6cf33 
#3 0x0000b34d75dc 
root@debian:~# chromium --user-data-dir=/root/chromium --no-sandbox 

Saturday, May 7, 2016

Debian / Ubuntu: build custom package with checkinstall

Using checkinstall is easy to manage/remove custom packages.

apt-get -y install checkinstall

wget custom-package.tar.gz
tar xfvz custom-package.tar.gz
cd custom-package
checkinstall make install

# list package contents
dpkg -L custom-package

# remove package
dpkg -r custom-package

Sunday, April 17, 2016

Force all network traffic pass through OpenVPN tunnel

# Flush all rules
iptables -F

# Let's change the policy to DROP.
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

# Allow basic INPUT traffic.
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT

# Allow basic OUTPUT traffic.
iptables -A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT

# Allow traffic to the OpenVPN server, DNS and via the tunnel.
iptables -A OUTPUT -o tun+ -j ACCEPT
iptables -A OUTPUT -p udp -m udp -d --dport 53 -j ACCEPT
iptables -A OUTPUT -p udp -m udp -d --dport 53 -j ACCEPT
iptables -A OUTPUT -p udp -m udp -d --dport 1194 -j ACCEPT

# Reject everything else.
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
iptables -A INPUT -j REJECT --reject-with icmp-port-unreachable
iptables -A FORWARD -j REJECT --reject-with icmp-port-unreachable
iptables -A OUTPUT -j REJECT --reject-with icmp-port-unreachable

Tuesday, April 5, 2016

Write new system image using bmaptool (beaglebone)

sudo apt-get -y install bmap-tools

# download image and bmap file

 #write system image
bmaptool copy bone-debian-8.3-lxqt-4gb-armhf-2016-01-24-4gb.img.xz /dev/sdb

bmaptool: info: discovered bmap file 'bone-debian-8.3-lxqt-4gb-armhf-2016-01-24-4gb.bmap'
bmaptool: info: block map format version 2.0
bmaptool: info: 870400 blocks of size 4096 (3.3 GiB), mapped 743361 blocks (2.8 GiB or 85.4%)
bmaptool: info: copying image 'bone-debian-8.3-lxqt-4gb-armhf-2016-01-24-4gb.img.xz' to block device '/dev/sdb' using bmap file 'bone-debian-8.3-lxqt-4gb-armhf-2016-01-24-4gb.bmap'
bmaptool: info: 1% copied

Sunday, March 27, 2016

Google Cloud Plataform - Compute engine - comand line examples

#list machine types
gcloud compute machine-types list

#list created instances
gcloud compute instances list

#create a redhat-6 instance with default machine type
gcloud compute instances create example-instance --image rhel-6 --zone us-central1-a

#delete redhat-6 instance
gcloud compute instances delete example-instance --zone us-central1-a

#create a ubuntu 15.10 instance with f1-micro machine type
gcloud compute instances create ubuntu1510-f1micro --image ubuntu-15-10 --zone us-central1-a --machine-type f1-micro

#create a ubuntu 15.10 instance with f1-micro machine type with HTTP/HTTPS enabled
gcloud compute instances create ubuntu1510-f1micro --image ubuntu-15-10 --zone us-central1-a --machine-type f1-micro  --tags http-server,https-server

#stop ubuntu 15.10 instance
gcloud compute instances stop ubuntu1510-f1micro  --zone us-central1-a

#start ubuntu 15.10 instance
gcloud compute instances start ubuntu1510-f1micro  --zone us-central1-a

#hardware reboot ubuntu 15.10 instance
gcloud compute instances reset ubuntu1510-f1micro  --zone us-central1-a

#ubuntu 15.10 instance change machine type to n1-standard-1
gcloud compute instances set-machine-type ubuntu1510-f1micro --machine-type n1-standard-1 --zone us-central1-a

#ubuntu 15.10 instance change machine type to g1-small
gcloud compute instances set-machine-type ubuntu1510-f1micro --machine-type g1-small  --zone us-central1-a

#ubuntu 15.10 instance change machine type to f1-micro
gcloud compute instances set-machine-type ubuntu1510-f1micro --machine-type f1-micro  --zone us-central1-a

#ubuntu 15.10 instance enable HTTP/HTTPS access
gcloud compute instances add-tags ubuntu1510-f1micro --zone us-central1-a --tags http-server,https-server

Wednesday, March 23, 2016

Ubuntu kernel Rebuild

# Get source
apt-get source linux-image-$(uname -r)

# Get tools
apt-get build-dep linux-image-$(uname -r)

# Copy current config
cp -v /boot/config-$(uname -r)   .config

# Customize config
make menuconfig

# parallel build
make -j

# Install kernel modules first (~260MB with debug symbols stripped)
make INSTALL_MOD_STRIP=1 modules_install

# Install kernel image (~6MB)
make install

# Reboot


Friday, December 11, 2015

Firmware Openwrt-15.05 para roteadores TP-Link com suporte OpenVPN

A imagem padrão disponível no site do Openwrt-15.05 não tem suporte ao OpenVPN, que pode ser instalado pelo gerenciador de pacotes 'opkg', mas devido a limitada memória flash de 4MB de grande maioria dos modelos, a instalação do Openvpn falha por falta de espaço. Mas se a imagem for feita com carinho com o OpenVPN já embutido durante a compilação vai funcionar nos limitados modelos low-cost de 4MB. A quem interessar disponibilizei essas imagens com OpenVPN para modelos de 4MB, veja nos Downloads do blog, essa lista de arquivos: DOWNLOAD
openwrt-15.05-ar71xx-generic-tl-mr3020-v1-squashfs-factory.bin openwrt-15.05-ar71xx-generic-tl-mr3220-v1-squashfs-factory.bin openwrt-15.05-ar71xx-generic-tl-mr3220-v2-squashfs-factory.bin openwrt-15.05-ar71xx-generic-tl-mr3420-v1-squashfs-factory.bin openwrt-15.05-ar71xx-generic-tl-mr3420-v2-squashfs-factory.bin openwrt-15.05-ar71xx-generic-tl-wr1043nd-v1-squashfs-factory.bin openwrt-15.05-ar71xx-generic-tl-wr1043nd-v2-squashfs-factory.bin openwrt-15.05-ar71xx-generic-tl-wr740n-v1-squashfs-factory.bin openwrt-15.05-ar71xx-generic-tl-wr740n-v3-squashfs-factory.bin openwrt-15.05-ar71xx-generic-tl-wr740n-v4-squashfs-factory.bin

Friday, December 4, 2015

LinSSID: Graphical Wifi Scanner

sudo add-apt-repository ppa:wseverin/ppa sudo apt-get update; sudo apt-get install linssid

Thursday, December 3, 2015

sudo sem perdir senha

basta adicionar essa linha no /etc/sudoers

Saturday, October 3, 2015

Testando o Syma X5C

Pequeno, rápido, estável e grava video no cartão SD, e de quebra faz todo tipo de flips.

Sunday, August 9, 2015

Mais um drone nascendo no laboratório de robótica

Iniciando  o trabalho
Transmissor de 5 canais - Turnigy 5X
Receptor de 5 canais - TGY-5RX

Controlador de voo - Openpilot CC3D Atom





Saturday, June 6, 2015

imax b6 battery charger: usb pinout and logview

O carregador imax b6 e seus clones possuem um entrada configurável para o sensor de temperatura LM35 ou para Serial / UART - TX - TTL.

Pinout IMAX B6

1+5V+5V for LM35 Temperature sensor
2DATATTL TX for Logging or V-Out of LM35

Quando configurado como Serial é preciso ligar o RX de um cabo USB-TTL no TX do IMAX6.
Depois é só abrir o logview e acompanhar o progresso de carga e descarga das baterias.

logview 2.7.6 monitorando a carga da bateria NiMH de 2000mah do Taranis
Essa bateria tem de carregar com 0.1A até chegar em 8.4V são quase 20 horas para carregar completamente.

Monday, May 18, 2015

Taranis Plus com telemetria bluetooth hc-06

Um dos recursos do Taranis Plus é a porta serial RS232 no compartimento da bateria.
É possível ativar um mirror da telemetria smart port na página 6 de configurações do rádio.
O baudrate é 57600. E a polaridade é invertida. 
HC-06 com regulador 7805 soldado, já que o regulador onboard suporta apenas 6V.
Bateria carregada fornece mais de 8V, dai a necessidade do 7805. 

Cabo conversor de 2mm (taranis) para 2.54mm (hc-06)
No entanto, esse setup funcionou parcialmente, pois nenhum dos apps para Android conseguiu se comunicar com o controle. Ligando um cabo usb-ttl no PC, e usando o terminal termite com hex dump, não encontrei nenhum 0x7e do protocolo FrSky. Isso indica que a serial do Taranis também deve ser invertida. Para testar esta hipótese sem modificar o hardware, é só usar uma SoftwareSerial invertida no Arduino.

Software Serial invertida nos pinos 3,2 
Arduino nano rodando SoftwareSerial invertida

A coisa começou a melhorar, o terminal encheu de 0x7e.

Termite 3.1 com hex dump
Agora é só partir para decodificar o protocolo ou deixar para um app de android fazer isso.
O mestre do barramento smart port, faz polling dos sensores enviando "0x7e" seguido do id do sensor.

----------- inicio do ciclo
7e 67 
7e 48 
7e e9 
7e 6a 
7e cb 
7e ac 
7e 0d 
7e 98 10 05 f1 01 2d 08 00 c2 
7e 98 10 01 f1 59 93 00 00 10 
7e 98 10 02 f1 58 00 00 00 a3 
7e 98 10 03 f1 06 00 00 00 f4 
7e 8e 
7e 2f 
7e d0 
7e 71 
7e f2 
7e 53 
7e 34 
7e 95 
7e 16 
7e b7 
7e 39 
7e ba 
7e 1b 
7e 00 
7e a1 
7e 22 
7e 83 
7e e4 
7e 45 
7e c6
--------------- fim do ciclo

Inversor para o TX do Taranis (JP1) conectar no RX do HC-06 (JP2)

Chegaram mais peças

O MPU-9250 integra acelerômetro, giroscópio e magnetômetro num único chip.

MPU-9250 9 DOF IMU

MPU-9250  9 DOF IMU

Propeller Adapter (Collet Type)  3.17mm
Para os motores 2212/13T 1000KV
Links para todas as cores

Transmitter Gimbal Set (Left) - Turnigy 9XR Transmitter Mode 1
Bom para montar um controle DIY. Giro de 60 º em cada eixo.
O gimbal PR10 do Taranis é melhor do que este, tem giro 80 º em cada eixo.

Turnigy MX-M801 12g / 2kg / 0.10sec Micro Metal Geared Servo.
Bom para montar um gimbal DIY para câmera.

Tuesday, May 12, 2015

Frsky Taranis Plus (X9D PLUS) + X8R + D8R-II Plus

Chegou meu rádio Frsky Taranis Plus, foram 3 dias pelo Fedex. Lembrando que o tempo é inversamente proporcional ao dinheiro. O motoqueiro da Fedex veio entregar na porta de casa o produto junto com uma lista imensa de todos os impostos (60% de importação e 17% de ICMS), que para variar são contabilizados em cascata, resultando em 110% do valor do produtos mais frete. Ou seja, o custo efetivo de um 1 dólar é 6 reais, em maio de 2015.

Taranis Plus - Rádio de 16 canais com telemetria e firmware opensource
Compre na hobbyking:

Abri, liguei, funcionou! Ok, então já pode atualizar o firmware para o mais recente build do opentx.

Para atualizar é preciso conectar o controle pela porta mini-usb no PC e instalar os drivers do USB-DFU.

Em seguida, usando o OpenTX Companion, basta clicar no botão de upload de firmware.
O meu estava com a versão 2.0.9 de fábrica, atualizei com a versão 2.0.17

Junto com o Taranis vem o receptor X8R
Receptor X8R - portas Smart, RSSI e SBUS

Também pedi um D8R que já vem com uma porta UART e 2 entradas analógicas.

Receptor D8R-II Plus - porta UART e 2 entradas analógicas,
Compre na hobbyking:

Sunday, April 26, 2015

ESP8266 ESP-01 relay control using Web server or MQTT / IOT

Build with ESP8266 ESP-01 Arduino IDE (

# turn off relay
curl -X PUT

# turn on relay
curl -X PUT

# control relay from Android
publish murilo/esp/rele/on   - turn on relay
publish murilo/esp/rele/off  - turn off relay

See source code...

Saturday, April 25, 2015

ESP8266 ESP-01 no Linux

A primeira ferramenta para o ESP-01 no Linux é o
No esptool dá para fazer a manutenção completa do ESP-01

root@murix-System-Product-Name:~/Downloads# wget
--2015-04-25 17:33:39--
Resolving (
Connecting to (||:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 23964 (23K) [text/plain]
Saving to: ‘’

100%[===============================================================================================================================>] 23.964      --.-K/s   in 0,006s 

2015-04-25 17:33:40 (3,88 MB/s) - ‘’ saved [23964/23964]

root@murix-System-Product-Name:~/Downloads# chmod +x

root@murix-System-Product-Name:~/Downloads# ./ --port /dev/ttyUSB0 read_mac
MAC: 18:fe:34:9f:13:f3

root@murix-System-Product-Name:~/Downloads# ./ --port /dev/ttyUSB0 write_flash 0x0 nodemcu_integer_0.9.6-dev_20150406.bin
Erasing flash...
Writing at 0x00066400... (100 %)


Monday, April 20, 2015

Tiva C + Stellaris: pinout

As placas Tiva C e Stellaris possuem alguns "problemas".
O primeiro são os resistores R9 e R10 que precisam ser removidos para não dar curto entre os GPIOs.
O segundo é o pinmux da USART1 e USART4 que iniciam em conflito, então é preciso remapear a USART1 para o conector J1, para que a USART4 funcione no conector J4.
O terceiro é o U4 presente somente nas Stellaris (na Tiva C já vem de fabrica sem ele), que precisa ser removido para permitir a placa ligar tensões abaixo de 5V (ex: bateria).
Resolvidos esses "problemas" é só partir para desenvolvimento.
Estão disponíveis:
8x UART - Serial
4x I2C - Wire
3x SPI
12x ADC - analogRead
44x GPIO - digitalRead/Write
23x PWM - analogWrite
Tiva C + Stellaris: pinout

Sunday, April 19, 2015

pipe view - usando dd com barra de progresso

Para ver o progresso de ferramentas como `dd`, apresento o `pv`.
O pv (pipe view) mostra a quantidade e velocidade dos bytes que passam em um pipe.

Muito simples de usar, basta passar o pv entre os pipes dos comandos.

Exemplo com dd:
root@murix:~/Downloads# dd if=archlinux-2015.04.01-dual.iso | pv | dd of=/dev/sdd bs=4M

 37MB 0:00:08 [17.1MB/s] [         <=>                                                ]

Saturday, April 18, 2015

ESP8266 ESP-01 review

O módulo ESP-01 v090 utiliza o SoC ESP8266 para prover um roteador e estação WiFi do tamanho de uma porta USB e custa menos de 3 dólares.

ESP-01 conectado no PC pelo Prolific PL2303

SDK oficial

Segundo o datasheet do ESP8266
O máximo permitido em qualquer pino é 3.6V
Portanto para ligar em I/O de 5V (ex: Arduino) precisa usar um shift level de 5v para 3.3v.
Pelo que vi alguns makers ligam direto no i/o 5v sem shift level, e funciona, mas a risco de queimar o esp8266. Testei ligando no PL2303 com i/o de 3.3v e com i/o de 5v e funcinou, para minimizar a change de queimar resolvi continuar usando o 3.3v que está dentro das especificações.

Pinout do ESP-01
Existem 2 modos de operações: o normal e o gravação de firmware.
Quem determinar o modo de operação é o GPIO0 durante o boot.
Se GPIO0 estiver em Low durante o boot, vai em entrar em modo de gravação.
Se GPIO0 estiver em High durante o boot, vai em entrar em modo normal.
Depois do boot dá para usar o GPIO0 como uma saída digital, mas eu não gosto de usar esse pinos de gravação para outras finalidades pois em alguns casos ocorrem problemas.

O pino CH_PD (chip select) deve se ligado ao VCC senão o ESP8266 fica travado antes do boot.
ESP-01 com pullup de 2.2k no CH_PD.

Também é preciso garantir a corrente necessária para o funcionamento do ESP8266, que no pico de transmissão pode chegar até 300mA
802.11b, CCK 1Mbps, POUT=+19.5dBm215mA
802.11b, CCK 11Mbps, POUT=+18.5dBm197mA
802.11g, OFDM 54Mbps, POUT=+16dBm145mA
802.11n, MCS7, POUT =+14dBm135mA
802.11b, packet size of 1024 bytes, -80dBm60mA
802.11b, packet size of 1024 bytes, -70dBm60mA
802.11b, packet size of 1024 bytes, -65dBm62mA
Deep sleep10mA
Saving mode DTIM 11.2mA
Saving mode DTIM 30.86mA

É possível ligar o RTS do PL2303 no RST do ESP-01 e o DTR do PL2303 no GPIO0 do ESP-01, assim dá para controlar o modo de operação dinamicamente pela serial sem ficar mexendo nos fios.
# RTS = CH_PD (i.e reset)

Firmware com Comandos AT

Código para Arduino/Energia

Firmware com script Lua:

Ferramenta de gravação de firmware:
Existe uma opção de gravar o firmware que vem embutido nessa ferramenta, que no caso é umas das últimas versões do nodemcu com suporte a Lua.

nodemcu firmware programmer
Firmware com AT versão 0.952
AT version:
SDK version:0.9.5;usp=drive_web&amp;tid=0B3dUKfqzZnlwRjFaNTUzZFptbzg#list

nodemcu firmware programmer configurar para gravar o firmware AT 0.952

Log do firmware que veio pré instalado no ESP-01:
não tem como sabe qual a versão do AT e nem do SDK que compilou, já que o AT+GMR não retorna nada muito útil.


7!aSÊS:6à;Ì;!ÕýAÆ [ýÊêþ
[ Version:]




Log do firmware AT versão 0.952:



 ets Jan  8 2013,rst cause:4, boot mode:(3,7)

wdt reset
load 0x40100000, len 816, room 16 
tail 0
chksum 0x8d
load 0x3ffe8000, len 788, room 8 
tail 12
chksum 0xcf
ho 0 tail 12 room 4
load 0x3ffe8314, len 288, room 12 
tail 4
chksum 0xcf
csum 0xcf

2nd boot version : 1.2
  SPI Speed      : 40MHz
  SPI Mode       : QIO
  SPI Flash Size : 4Mbit
jump to run user1

Ai-Thinker Technology Co. Ltd.


AT version:
SDK version:0.9.5


O firmware acima foi compilado com o SDK 0.9.5 com parser AT 0.21 cabe em 512kb de flash
ESP8266 SDK (esp_iot_sdk_v0.9.5_15_01_23) released
com o SDK 1.0.0 entrou o parser AT 0.22 cabe em 512kb de flash
ESP8266 SDK (esp_iot_sdk_v1.0.0_15_03_20) released
como o SDK &gt;= 1.0.1 os novos comandos AT precisam de pelo menos 1024kb de flash.

Ferramenta de exploração com suporte a Nodemcu/Lua e comandos AT

Esplorer tool

API do Arduino para ESP8266

Arduino IDE com suporte a ESP8266

Onde comprar:

Thursday, April 9, 2015

Sunday, March 29, 2015

ArduPilot Mega (APM) Power module (PM) 1.0 review

Antes de ligar qualquer hardware é bom verificar se componentes são os que deveriam ser.
E também verificar as tensões de entrada e saída, se estão dentro do esperado.

Especificação do APM PM 1.0
Max input voltage: 18V
Min input voltage: 4.5 V
Max current sensing: 90A with APM, 60A with Pixhawk
Voltage and current measurement configured for 5V ADC
Switching regulator outputs 5.3V and 2.25A max
6-pos DF13 cable plugs directly to APM 2.5's 'PM' connector

Face superior do APM PM
Face inferior do APM PM
Soldei os headers de 2.54mm para facilitar os testes. 

O regulador usado neste versão da placa, é o MP1583DN
- 3A Output Current
- Programmable Soft-Start
- 100mΩ Internal Power MOSFET Switch
- Stable with Low ESR Output Ceramic Capacitors
- Up to 95% Efficiency
- 20μA Shutdown Mode
- Fixed 385KHz Frequency
- Thermal Shutdown
- Cycle-by-Cycle Over Current Protection
- Wide 4.75V to 23V Operating Input Range
- Output Adjustable from 1.22V to 21V
- Under-Voltage Lockout

O APM power module usa um Regulador chaveado MP1583DN
Monolithic Power Systems (MPS) - 3A 385kHz 23V Buck
No multímetro a saída do MP1583DN ficou em 5,3V como indicado no projeto. 
Essa saída não serve para alimentar os Servos porque é chaveada, o recomendo para os servos é usar os BEC lineares (7805 e similares) dos ESCs.

A medição do tensão é feita por um divisor resistivo de 1,5k 0.1% e 13,7k 0.1%.
Medindo com o multímetro os valores foram próximos: R1=1,49k e R2=13,69k.
Para entrada de 18V a saída ficou em 1,77V
Para entrada de 12V a saída ficou em 1,18V
Com esses valores dá para ligar direto no ADC da beaglebone black, que aceita até 1,8V

No arduino com ADC de 10bits, o analogRead na média móvel de 100 valores deu 250 para 11,50V
A referência analógica 4,62V deu no multímetro.
Então 4,62 / 1024 = 0,00451171875V.
Vin = Vo * (R1+R2) / R2 = 11,491256816275167785234899328859

A medição de corrente é feita usando o INA169 com resistor shunt RS=0.0005ohm 1% 4W e resistor de saída de RL=110k 0.1%.
No multímetro o resistor de saída RL deu 108.3k. RS=0,2ohm (por falta de resolução).
Segundo o datasheet com Is = Vo * 1000 / (RL*RS)
Na fonte o consumo de 0.8A gerou 0,044V no Vo,
Então Is=(0.044*1000)/(0.0005*110000)=44/55=0.8A
Para Is=60A => 60*55/1000 = 3.3V
Para Is=90A => 90*55/1000 = 4,95V

Friday, March 27, 2015

Chegaram mais peças do drone

Foram 2 pacotes:
- 4 ESCs amarelos da Hobbypower, 2 motores XDD (53 dias);
- APM Power module 1.0 (45 dias)

ESC Hobbypower genérico dá para instalar o firmware do simonk. 

ESCs Hobbypower 30A
 Os motores agora estão vindo com os conectores banana, mas perderam as etiquetas

Motores a2212/13t com plugues banana de 3,5 mm 

ArduPilot Mega (APM) Power module (PM), Dá para medir a tensão e a corrente da bateria, já vem com um fonte chaveada de 5V / 3A. Agora a telemetria da bateria ficou completa.

APM Power module 1.0