This weekend I had some time to dive into my new Intel Edison, with companion Breakout Board.
There are already a lot of good resources online for getting started with the Edison, but I wanted to share the problems I ran into while starting working with the two boards.
The first step I recommend is to watch this video by Kevin Sidwar, or follow his quickstart guide:
The next step for me was to upgrade the Edison to the latest version of the Yocto Linux. I found this guide on the Intel Community site to be especially helpful.
C/C++ Development on the Edison using Eclipse
I wanted to start doing development using C/C++, so I followed this guide from Intel.
One important thing that the guide doesn’t mention:
The Edison shows up in the Remote Systems window labeled as “galileo”. My first move was to rename it to “Edison”. I found that actually breaks the connection between Eclipse and the Edison, so at this point I definitely recommend that you do not rename the galileo in the Eclipse remote system directory to anything else:
If you do change it, you will probably get the following error while trying to Run an application:
For Google indexing sake, the error is:
Error during file upload.
Could not find the remote connection.
The problem was especially frustrating because Eclipse still allows you to make a connection to the renamed target, but you can’t run applications or open the terminal. I’ll need to do some more digging to understand why the name is hardcoded in this way.
Accessing the Breakout Board Pins using MRAA library
The next problem I ran into was trying to convert the 2_cpp_helloworld
project into a simple test to toggle one of the GPIO pins. The first step I had to do was to add the following references. (Right click on the Project and Click properties)
${DEVKIT_HOME}/devkit-x86/sysroots/i586-poky-linux/usr/include/c++/bits
${DEVKIT_HOME}/devkit-x86/sysroots/i586-poky-linux/usr/include/mraa
After the header files were added I was getting the following errors when compiling:
undefined reference to 'mraa_adc_raw_bits'
The solution to this is to make a fix in the linker to include the mraa library.
Change the linker flags to the following:
${LDFLAGS} -lmraa
Finally, when I was trying to run the application, the console was throwing the following error:
"Intel Edison Failed to initialize Arduino board TriState"
The fix for this is to upgrade the libmraa
library on the Edison:
The method to upgrade is pretty easy, just run the following three commands on the Edison:
echo "src intel-iotdk http://iotdk.intel.com/repos/1.1/intelgalactic" > /etc/opkg/intel-iotdk.conf
opkg update
opkg upgrade
Breakout Board to MRAA Pin Number
The final tip I have to share is the location of the GPIO pins and their numbers:
This document has the following useful table:
MRAA Number | Physical Pin | Edison Pin | Notes | Pinmode0 | Pinmode1 | Pinmode2 |
---|---|---|---|---|---|---|
0 | J17-1 | GP182 | GPIO-182 | PWM2 | ||
1 | J17-2 | NC | Nothing from mraa | |||
2 | J17-3 | NC | Nothing from mraa | |||
3 | J17-4 | VIN | Nothing from mraa | |||
4 | J17-5 | GP135 | GPIO-135 | UART | ||
5 | J17-6 | RCVR_MODE | Nothing from mraa | |||
6 | J17-7 | GP27 | GPIO-27 | I2C-6-SCL | ||
7 | J17-8 | GP20 | GPIO-20 | I2C-1-SDA | ||
8 | J17-9 | GP28 | GPIO-28 | I2C-6-SDA | ||
9 | J17-10 | GP111 | GPIO-111 | SPI-5-CS1 | ||
10 | J17-11 | GP109 | GPIO-109 | SPI-5-SCK | ||
11 | J17-12 | GP115 | GPIO-115 | SPI-5-MOSI | ||
12 | J17-13 | OSC_CLK_OUT_0 | Nothing from mraa/check | |||
13 | J17-14 | GP128 | GPIO-128 | UART-1-CTS | ||
14 | J18-1 | GP13 | GPIO-13 | PWM1 | ||
15 | J18-2 | GP165 | GPIO-165 | |||
16 | J18-3 | GPI_PWRBTN_N | Nothing from mraa | |||
17 | J18-4 | MSIC_SLP_CLK2 | Nothing from mraa | |||
18 | J18-5 | V_VBAT_BKUP | Nothing from mraa | |||
19 | J18-6 | GP19 | GPIO-19 | I2C-1-SCL | ||
20 | J18-7 | GP12 | PWM0 | GPIO-12 | PWM0 | |
21 | J18-8 | GP183 | PWM3 | GPIO-183 | PWM3 | |
22 | J18-9 | NC | Nothing from mraa | |||
23 | J18-10 | GP110 | GPIO-110 | SPI-5-CS0 | ||
24 | J18-11 | GP114 | GPIO-114 | SPI-5-MISO | ||
25 | J18-12 | GP129 | GPIO-129 | UART-1-RTS | ||
26 | J18-13 | GP130 | GPIO-130 | UART-1-RX | ||
27 | J18-14 | FW_RCVR | Nothing from mraa | |||
28 | J19-1 | NC | Nothing from mraa | |||
29 | J19-2 | V_V1P80 | Nothing from mraa | |||
30 | J19-3 | GND | Nothing from mraa | |||
31 | J19-4 | GP44 | GPIO-44 | |||
32 | J19-5 | GP46 | GPIO-46 | |||
33 | J19-6 | GP48 | GPIO-48 | |||
34 | J19-7 | RESET_OUT | Nothing from mraa | |||
35 | J19-8 | GP131 | GPIO-131 | UART-1-TX | ||
36 | J19-9 | GP14 | GPIO-14 | |||
37 | J19-10 | GP40 | GPIO-40 | SSP2_CLK | ||
38 | J19-11 | GP43 | GPIO-43 | SSP2_TXD | ||
39 | J19-12 | GP77 | GPIO-77 | SD | ||
40 | J19-13 | GP82 | GPIO-82 | SD | ||
41 | J19-14 | GP83 | GPIO-83 | SD | ||
42 | J20-1 | V_VSYS | Nothing from mraa | |||
43 | J20-2 | V_V3P30 | Nothing from mraa | |||
44 | J20-3 | GP134 | ||||
45 | J20-4 | GP45 | GPIO-45 | |||
46 | J20-5 | GP47 | GPIO-47 | |||
47 | J20-6 | GP49 | GPIO-49 | |||
48 | J20-7 | GP15 | GPIO-15 | |||
49 | J20-8 | GP84 | GPIO-84 | SD | ||
50 | J20-9 | GP42 | GPIO-42 | SSP2_RXD | ||
51 | J20-10 | GP41 | GPIO-41 | SSP2_FS | ||
52 | J20-11 | GP78 | GPIO-78 | SD | ||
53 | J20-12 | GP79 | GPIO-79 | SD | ||
54 | J20-13 | GP80 | GPIO-80 | SD | ||
55 | J20-14 | GP81 | GPIO-81 | SD |
The rows 17-2o are shown in this diagram:
Pin one is on the right side. The breakout board also shows the pin and row on the silkscreen.
Conclusion
Hopefully this post will help resolve some pesky problems, or at very least helped you avoid having the same problems I faced. If you found this article helpful, feel free to drop a note in the comments below.
Leave A Comment