cancel
Showing results for 
Search instead for 
Did you mean: 
cancel
Showing results for 
Search instead for 
Did you mean: 

Community Tip - Need to share some code when posting a question or reply? Make sure to use the "Insert code sample" menu option. Learn more! X

Using the Raspberry Pi as a WIFI hotspot

No ratings



About

This is the second part of a ThingBerry related blog post series.

thingberry_small.png

ThingBerry is ThingWorx installed on a RaspBerry Pi, which can be used for portable demonstrations without the need of utilizing e.g. customer networks. Instead the ThingBerry provides its own custom WIFI hotspot and allows Things to connect and send / receive demo data on a small scale.

In this particual blog post we'll discuss on how to setup the ThingBerry as a WIFI hotspot to directly connect with mobile devices or other Raspberry Pis.

As the ThingBerry is a highly unsupported environment for ThingWorx, please see this blog post for all related warnings.

In case this guide looks familiar, it's probably because it's based on https://frillip.com/using-your-raspberry-pi-3-as-a-wifi-access-point-with-hostapd/

WIFI Hot Spot

As the ThingBerry is currently connected via ethernet we can utilize the Raspberry Pi's WIFI connection to create a private network where all the wireless devices can connect to, e.g. another Raspberry Pi or a ESP8266

First we need to install dnsmasq and hostapd. Those will help setting up the access point and create a private DNS server to dynamically assign IP-addresses to connecting devices.

sudo apt-get install dnsmasq hostapd

Interfaces

We will need to configure the wlan0 interface with a static IP. For this the dhcpcd needs to ignore the wlan0 interface.

sudo nano /etc/dhcpcd.conf

Paste the following content to the end of the file. This must be ABOVE any interface lines you may have added earlier!

denyinterfaces wlan0

Save and exit.

Let's now configure the static IP.

sudo nano /etc/network/interfaces

Comment out ALL lines for the wlan* configurations (e.g. wlan0, wlan1). By default there are three lines which need to be commented out by adding a # at the beginning of the line. After this the wlan0 can be pasted in:

allow-hotplug wlan0

iface wlan0 inet static

  address 192.168.0.1

netmask 255.255.255.0

network 192.168.0.0

broadcast 192.168.0.255


Save and exit.

Now restart the dhcpcd service and reload the wlan0 configuration with

sudo service dhcpcd restart

sudo ifdown wlan0

sudo ifup wlan0


Hostapd

Hostapd is used to configure the actual WIFI hot spot, e.g. the SSID and the WIFI password (wpa_passphrase) that's required to connect to this network.

sudo nano /etc/hostapd/hostapd.conf

Paste the following content:

interface=wlan0

driver=nl80211

ssid=thingberry

hw_mode=g

channel=6

wmm_enabled=1

ieee80211n=1

country_code=DE

macaddr_acl=0

ht_capab=[HT40][SHORT-GI-20][DSSS_CCK-40]

auth_algs=1

ignore_broadcast_ssid=0

wpa=2

wpa_key_mgmt=WPA-PSK

wpa_passphrase=changeme

rsn_pairwise=CCMP


If you prefer another SSID or a more secure password, please ensure updating above configuration!

Save and exit.

Check if the configuration is working via

sudo /usr/sbin/hostapd /etc/hostapd/hostapd.conf

It should return correctly, without any errors and finally show "wlan0: AP-ENABLED". With this you can now connect to the "thingberry" SSID.

However there's no IP assigned automatically - so that sucks​ can be improved...

Stop hostapd with CTRL+C and let's start it on boot.

sudo nano /etc/default/hostapd

At the end of the file, paste the following content:

DAEMON_CONF="/etc/hostapd/hostapd.conf"

Save and exit.

DNSMASQ

Dnsmasq allows to assign dynamic IP addresses. Let's backup the original configuration file and create a new one.

sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig 

sudo nano /etc/dnsmasq.conf


Paste the following content:

interface=wlan0

listen-address=192.168.0.1

bind-interfaces

dhcp-range=192.168.0.100,192.168.0.199,255.255.255.0,12h


Save and exit.

This will make the DNS service listen on 192.168.0.1 and assign IP addresses between 192.168.0.100 and 192.168.0.199 with a 12 hour lease.

Next step is to setup the IPV4 forwarding for the wlan0 interface.

sudo nano /etc/sysctl.conf

Uncomment the following line:

You can search in nano with CTRL+W

net.ipv4.ip_forward=1

Save and exit.

Hostname translation

To be able to call the ThingBerry with its actual hostname, the hostname needs to be mapped in the host configuration.

sudo nano /etc/hosts

Search the line with your hostname and update it to the local IP address (as configured in the listen-address above), e.g.

192.168.0.1 thingberry

Save and exit.

Please note that this is the hostname and not the SSID of the network!

Finalizing the Configuration

Run the following command to enable the fowarding and reboot.

sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"

sudo reboot


Optional: Internet Access

The ThingBerry is independent of any internet traffic.

However if your connected devices or the ThingBerry itself need to contact the internet, the WIFI connection needs to route those packages to and from the (plugged-in) ethernet device.

This can done through iptables

sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE 

sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT 

sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT


All traffic will be internet related traffic will be forwarded between eth0 and wlan0 and vice versa.

To load this configuration every time the ThingBerry is booted, it needs to be saved via

sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"

Run this file by editing

sudo nano /etc/rc.local

Above the line exit 0 add the following line:

iptables-restore < /etc/iptables.ipv4.nat

Save and exit.

Verification

Connect to the new WIFI hotspot via the SSID and the password configured earlier through any WIFI capable device.


When connecting to your new access point check your device's IP settings (in iOS, Android or a laptop / desktop device). It should show a 192.168.0.x IP address and should be pingable from the ThingBerry console.

Connect to http://192.168.0.1/Thingworx or http://<servername>/Thingworx to open the Composer.

Version history
Last update:
‎Mar 27, 2017 04:06 AM
Updated by:
Labels (1)