Sunteți pe pagina 1din 5

Raspberry Pi with Arduino Uno and Golang

priyabgeek.blogspot.com/2016/09/raspberry-pi-with-arduino-uno-and-golang.html

Background

I just bought an Arduino Uno to continue my IOT experiments and one of the first
experiments that I wanted to carry out was to check how I can setup Arduino Uno with my
Raspberry PI 3 mod b model and make it work.

It must be understood that what I am going to explain now involves a bit of hack and hence
should be done with utmost care as it may change your Raspberry pi settings specifically
with that of inbuilt Bluetooth.

I wanted to try and see how we can program Arduino with Raspberry Pi without Arduino
IDE. Turns out we can do it using serial port and though we can do Arduino programming
and serial port programming using python for this particular instance I chose Golang. I
wanted particularly to explore the gobot framework which is suited for robotics and Arduino
programming.

Serial Port Raspberry PI 3


Now usually Arduino can be accessed in Raspberry Pi3 via serial port. It communicates
with the RasPi via GPIO 14/15 which on the Model B,B+ and Pi2 is mapped to UART0.
However on the Pi3 these pins are mapped to UART1 since UART0 is now used for the
Bluetooth module. However UART1 is software UART and baud rate is dependent to clock
speed which can change with the CPU load, under voltage and temperature; therefore not
stable enough. One hack is to force the CPU to a lower speed ( add core_freq=250 to
/boot/cmdline.txt)which cripples the Pi3 performance.

A better solution is to disable BT and map UART1 back to UART0 (ttyAMA0) so we can talk
to Arduino in the same way as before.
1/5
Step 1: Update the system with:

sudo apt-get update


sudo apt-get upgrade

Step 2: Device Tree settings as below:

Add device tree to /boot/config.txt to disable the Raspberry Pi 3 bluetooth.

sudo nano /boot/config.txt

Add at the end of the file

dtoverlay=pi3-miniuart-bt

Exit the editor saving your changes and then:

sudo reboot

Note:

For Raspbian Jessie releases after 18th March 2016

There is now a device tree file called pi3-miniuart-bt which makes the Raspberry Pi 3
disable the Bluetooth and map pl011 UART on pins 14 and 15 as before.

Enabling the Serial Console Rasbian Jessie after 18th March 2016 release

To enable the serial console, you need to edit the /boot/cmdline.txt file

sudo nano /boot/cmdline.txt

Change the file to the following:

dwc_otg.lpm_enable=0 console=tty1 console=serial0,115200 root=/dev/mmcblk0p2


rootfstype=ext4 elevator=deadline fsck.repair=yes root wait

Exit and save your changes

With the serial console enabled you should now have the boot commands and login prompt
when connected at 115200 baud.

2/5
(Reference: https://www.abelectronics.co.uk/kb/article/1035/raspberry-pi-3-serial-port-
usage)

Setting up Arduino with Raspberry Pi 3


Install Gort
The Gort CLI provides many useful features on many hardware platforms, and has no other
dependencies. It can be installed by downloading the archive for Gort from http://gort.io and
copying gort binary to /usr/bin in Raspberry Pi. Point to note is that you need to download
the archive file for ARM linux (e.g. gort_0.x.x_linux_arm.tar.gz)

Setup Arduino Firmware


First plug the Arduino into your computer via the USB/serial port.

Once plugged in, use Gort's gort scan serial command to find out your connection info and
serial port address:

$ gort scan serial

Use the gort arduino install command to install avrdude, this will allow you to upload firmata
to the arduino:
$ gort arduino install

Once the avrdude uploader is installed we upload the firmata protocol to the arduino, use
the arduino serial port address found when you ran gort scan serial, or leave it blank to use
the default address ttyACM0:
$ gort arduino upload firmata /dev/ttyACM0

Now you are ready to connect and communicate with the Arduino using serial port
connection
(Reference: https://gobot.io/documentation/platforms/arduino/)

Running a robot program in Arduino

The below packages for Arduino platform provide the adaptor for microcontrollers such as
Arduino that support the Firmata protocol. The sample program to run is given below:

3/5
// testarduino.goimport (
"time"
"github.com/hybridgroup/gobot"
"github.com/hybridgroup/gobot/platforms/firmata"
"github.com/hybridgroup/gobot/platforms/gpio"
)
func main() {
gbot := gobot.NewGobot()
firmataAdaptor := firmata.NewFirmataAdaptor("arduino", "/dev/ttyACM0")
led := gpio.NewLedDriver(firmataAdaptor, "led", "13")
work := func() {
gobot.Every(1*time.Second, func() {
led.Toggle()
})
}
robot := gobot.NewRobot("bot",
[]gobot.Connection{firmataAdaptor},
[]gobot.Device{led},
work,
)
gbot.AddRobot(robot)
gbot.Start()
}

To run the program:


1. Place the above code as "testarduino.go" into a folder e.g
pi@raspberrypi:~/code/golang $ ls testfermata_arduinopi/
testarduino.go

Setup the GOPATH, then run the below commands.


export GOPATH=`pwd`

Setup gobot framework


go get -d -u github.com/hybridgroup/gobot/... && go install
github.com/hybridgroup/gobot/platforms/firmata

Run the go program:


go run testarduino.go

The following terminal cast shows the above step

4/5
The output can be watched in the following video where an led on Arduino is blinking

5/5

S-ar putea să vă placă și