# BeagleBone, PWM, UART, and WiFi in Ubuntu 16.04

## PWM

### PWM Dependencies

Make sure you can use the config-pin command in your BeagleBone terminal. If you don’t have it then set it up like this:

$cd /tmp$ wget https://raw.githubusercontent.com/cdsteinkuehler/beaglebone-universal-io/master/config-pin
$sudo chmod +x config-pin # turn it to an executable$ sudo cp ./config-pin /usr/bin # copy it somewhere that you can use it from any path
$config-pin -l P8.07 # list the pin's available functionalities, confirms that config-pin works  The last line should output something similar to below: default gpio gpio_pu gpio_pd timer  ### PWM Setup First we load the universal IO device tree overlay by doing the following: $ echo cape-universaln > /sys/devices/platform/bone_capemgr/slots


Based on the OS image that you have, the path above might be different. If so, use find to find it (e.g. sudo find / -name slots | grep bone_capemgr). I initially thought that the cape-universaln has a typo but then realized that it’s correct. Doing that also needs superuser privileges. So either you can do sudo su before typing it or use the following instead:

$sudo sh -c "echo cape-universaln > /sys/devices/platform/bone_capemgr/slots"  Confirm the change by doing the following: $ cat /sys/devices/platform/bone_capemgr/slots


That should output something like the following in which we want to see something similar to the last line:

0: PF----  -1
1: PF----  -1
2: PF----  -1
3: PF----  -1
4: P-O-L-   0 Override Board Name,00A0,Override Manuf,cape-universaln


### Enable PWM on a Pin

In this example, I’ll enable PWM on P9.14:

$config-pin P9.14 pwm  Confirm the change: $ cat /sys/devices/platform/ocp/ocp\:P9_14_pinmux/state


That should output pwm. You should alternatively be able to change the state by:

$echo pwm > /sys/devices/platform/ocp/ocp\:P9_14_pinmux/state  Find the related chip from https://github.com/jadonk/bonescript/blob/master/src/bone.js and locate it in /sys/class/pwm by: $ ls -l /sys/class/pwm


Go into the directory of interest and use the following commands to configure the PWM output. Notice that the pwm subdirectory is created after the export part.

$echo$i > /sys/class/pwm/pwmchip2/export # i = pwm output of the chip
$echo$i > /sys/class/pwm/pwmchip2/unexport

# if i=0 then the pwm0/ directory is created which you need to go into

$echo 1000000000 > /sys/class/pwm/pwmchip2/pwm0/period$ echo 500000000 > /sys/class/pwm/pwmchip2/pwm0/duty_cycle

$echo 1 > /sys/class/pwm/pwmchip2/pwm0/enable$ echo 0 > /sys/class/pwm/pwmchip2/pwm0/enable


### Load Device Tree Overlay on Boot

To have the cape-universaln loaded by default at boot time change this line in /boot/uEnv.txt

# cape_enable=bone_capemgr.enable_partno=


To the following and don’t forget to uncomment it if needed:

cape_enable=bone_capemgr.enable_partno=cape-universaln


Also, your uEnv.txt file might be in a different directory like /boot/uboot/.

## WiFi

### Enable WiFi and Connect to Network on Boot

Find out what the interface’s name is:

$iw dev  Outputs something like: phy#0 Interface wlxe8de27a1697e # <- this ifindex 6 wdev 0x1 addr e8:de:27:a1:69:7e type managed  Save your network authentication information in a file by doing the below which will ask for a passphrase: $ sudo sh -c "wpa_passphrase Bruce >> /etc/wpa_supplicant/wpa_supplicant.conf"


Add your network and wpa configuration information to /etc/network/interfaces:

auto wlxe8de27a1697e
iface wlxe8de27a1697e inet static
address 192.168.1.4 # IP of choice for BeagleBone
network 192.168.1.0
gateway 192.168.1.1
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
dns-nameservers 8.8.8.8 # a DNS address


Thanks to and based on http://askubuntu.com/questions/46930/how-can-i-set-up-password-less-ssh-login. In the host terminal perform and give the configurations that you’d like:

$ssh-keygen  Again on the host: $ ssh-copy-id some_username@192.168.1.4


Now you don’t need to provide password for the BeagleBone each time you want to ssh into it from the host device. Next, we will disable password authentication so that devices other than the host device that you just configured cannot easily guess your password:

\$ sudo nano /etc/ssh/sshd_config


There is a line that says something like:

#PasswordAuthentication yes


Which you should uncomment and change to:

PasswordAuthentication no


The information is given by /etc/issue.net so change it however you like:
sudo nano /etc/issue.net # change the message