Configuring Wireless hotspot and DHCP server with Hostapd
This will allow the RotorHazard race timer to broadcast an active WiFi network and allow users and admins to connect to the timer wirelessly using the on board wireless interface. This will also allow other slave timers to connect wirelessly to the RotorHazard timer with the new 2.1.0 beta.1 version at the time of this article for split lap timing.
First, we will update the system as usual.
sudo apt-get update
sudo apt-get upgrade
Now, we begin installing HostAPD and dnsmasq. HostAPD will put the wifi interface into host mode and dnsmasq will provide clients with DHCP.
sudo apt-get install dnsmasq hostapd
Now, we will make sure that both the HostAPD and dnsmasq services are not running as they have not yet been configured.
sudo systemctl stop dnsmasq
sudo systemctl stop hostapd
Now, lets configure a static IP for the wlan0 interface.
sudo nano /etc/dhcpcd.conf
Copy and paste the following lines.
interface wlan0
static ip_address=192.168.10.1/24
You can make the IP address whatever you like, but we need to configure DHCP to offer address within the same subnet. Now we will restart the dhcpcd daemon.
sudo service dhcpcd restart
To test your configuration.
ifconfig
Should now print this.
get the output
Now, lets setup the DHCP server. We will move the default dnsmasq configuration file and create a blank file with the DHCP settings we need.
sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig
Now lets edit the dnsmasq configuration file.
sudo nano /etc/dnsmasq.conf
Paste the text below and hit ctrl+x and Y to save.
interface=wlan0
dhcp-range=192.168.10.50,192.168.4.100,255.255.255.0,24h
As you can see, we are specifying which interface to listen on for incoming requests. This will be wlan0. We state the start and end address range offered to clients and have also specified a lease time of 24 hours.
We are also only giving out leases between 50 and 100. This is to allow for a static range that will not be issued by DHCP. This could be salve timers or anything else statically connected. This will also allow for 50 DHCP clients which is more then enough.
Now, lets setup the WiFi SSID and password. We will edit the hostapd config file and change the SSID and password for the wireless network.
sudo nano /etc/hostapd/hostapd.conf
Paste the following and replace SSID with the name you wish to have broadcast as the SSID. Do the same with the WPA Passphrase.
interface=wlan0
driver=nl80211
ssid=racetimer
hw_mode=g
channel=7
wmm_enabled=0
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=racetimer
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
Additional options can be changed but are not required. You can use a WiFi spectrum analyzer on your phone to scan the best available WiFi channels with the least noise if you like, and set hostapd to use that channel. Hit crtl+x to save and Y.
Now, we will tell raspian to use the hostapd file as the daemon file.
sudo nano /etc/default/hostapd
Replace #DAEMON_CONF with the line below. Save and exit. Make sure you remove the # from the beginning of the line so its not commented out.
DAEMON_CONF="/etc/hostapd/hostapd.conf"
Now, we are ready to start the services and test.
sudo service hostapd start
sudo service dnsmasq start
After a short time, you should see your WiFi SSID being broadcast. Try and connect to it and see if you can get DHCP. If so, navigate to the static IP address that we set earlier and the port which the RotorHazard web GUI is running on.
If the WiFi network fails to broadcast, try restarting the PI. If that fails we may need to remove the wpa_supplicant.conf file. To do this
cd /etc/wpa_supplicant/
sudo rm wpa_supplicant.conf
Now, restart the PI and try again!
sudo restart
To view issued DHCP leases
cat /var/lib/misc/dnsmasq.leases
To remove leases
sudo service dnsmasq stop
sudo rm /var/lib/misc/dnsmasq.leases
sudo service dnsmasq start
If say you wanted to deleted individual leases
sudo service dnsmasq stop
sudo nano /var/lib/misc/dnsmasq.leases
Delete the desired leases and save with crtl + x then restart the dnsmasq service.
sudo service dnsmasq start
Check out the next page for the Raspberry PI WiFi antenna mod for extended range.
All Comments
Awesome bro
Awesome article about the racetimer, but username and password dont work and the Admin login is also missing.
Could you please be so kind and share those information with us.
Hey man. The admin login for the web server didnt work? Should be admin and password as rotorhazard. Are you able to browse to the web server?
Yeah, that work. Thank man
Thank you for the guide and the pre-built image. Made it super quick to switch over from Delta5!
Great, glad it helped you. Stay tuned for new releases of RotorHazard, there are some cool upcoming features including split timing!
I flashed the 2.1.1 .img, but I don’t see the AP, how can I enable the AP to get the SSID to show up?
Thanks,
Hi Quy, the easiest way to do this is to plug in a second USB wifi dongle. You should then get your SSID show. If you do not have one, do the following after connecting your timer to your router via Ethernet. This is because the WiFi AP is assigned to WLAN1 but the default wifi interface built into the PI is on WLAN0. Here we need to reassign the AP and DHCP server to use WLAN0 instead of WLAN1.
1. run sudo mv wpa_supplicant-wlan0.conf wpa_supplicant-wlan1.conf
2. sudo nano /etc/dhcpcd.conf
Find the following line and replace wlan1 with wlan0
interface wlan1 – Replace with wlan0
static ip_address=192.168.10.1/24
static routers=192.168.10.1
static domain_name_servers=192.168.10.1 8.8.8.8
3. sudo nano /etc/dnsmasq.conf
replace interface=wlan1 with interface=wlan0 – Hit ctrl x and y to save.
4. sudo nano /etc/hostapd/hostapd.conf
replace interface=wlan1 with interface=wlan0 – Hit ctrl x and y to save.
5. sudo reboot
You should now see the ‘racetimer’ SSID broadcast.
Hi Dean,
So I got it figured out with some ‘googling” … LOL
So I reimaged the SD card again to be sure to start fresh and when I ssh to the PI, I noticed a message saying WLan0 was disabled by rfkill, so I entered the following command:
ifconfig – (I was not able to see the WLan0 interface)
I then did the commands:
sudo rfkill unblock 0
sudo reboot
once I made a ssh connection again, I tried:
ifconfig – (I was now able to see the WLan0 interface)
I went back through your instructions, but for the wpa_supplicant-wlan0.conf .. this was located in /etc/wpa_supplicant/ folder correct?
I’m now able to see the “racetimer” SSID
Thanks.
Hi Dean,
Thanks for the instructions, unfortunately it didn’t work for me or I may have missed something.
First off, I’m not a linux expert by any means, but when I do the “ifconfig” command I don’t see the Wlan0 interface. Is this why the commands you provided did not work?
I tried another image 2.0.1 and was able to get the Wlan0, so is the 2.1.1 img missing something?
Thanks.
Yes, you should be seeing a wlan0 or a wlan1 interface. If you don’t see any interfaces this would mean that your wlan interface is either faulty, or down. To bring the interface up you could try
sudo ifconfig wlan0 up
i figured it out in the comment above… thanks.
No worries. Glad you got it sorted.
When i download image 2.1.1 the .rar file does not open. It gives me a message saying this file is not an archive.
Nevermind, seems my rar software is corrupt.
Glad you got it sorted.
hey thanks for the hard work .im having a hard time trying to boot from the compiled image.
the normal raspberry buster works but lots of the commands come back as fails and the compiled sd card 2.1.1 dosent boot and show on putty at all. ive been at this all day and im at a loose end now . is there a problem with the stable img? should i be doing something different than the normal boot version.. please help man . cheers . Nick
Hi Nick! I’ve updated the image. Could you try downloading again and flashing the new image and see if the SSID is broadcast as “racetimer”. I have moved the wpa_supplicant to wpa_supplicant-wlan1.conf so if you need internet access, you either need to use Ethernet or insert a USB wifi dongle and edit the wpa_supplicant-wlan1.conf in /etc/wpa_supplicant to your wifi details.
Cheers
hey Dean
Awesome ill try that again and let you know.
i got the buster one to almnost complete after 10 hours the other day lol but now plugging it back in i get this looping constantly “Raspbian GNU/Linux 10 raspberrypi ttyS0” so ive just formatted sd and started again.
Sweet, if you’re having consistent boot issues its almost 99% of the time a bad SD card. Try a different SD card!
Its weird as the sd is fine for the buster image. its writing the image now .did you change it to the 2.1 beta image as that is what its downloading as now? cheers
hey dean its booted from sd card but its maybe something I did loading all the files on the buster img.but im getting this login loop constantly
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒ѥ▒▒Ɂlogin:
Raspbian GNU/Linux 10 racetimer ttyS0
god this is not my forte lol .
Yup, boot loops and hangs are generally SD cards! Especially if its a fresh install.
ok ill try another one. its showing in my wifi though as racetimer so something is working . thanks man
[ 16.256020] i2c /dev entries driver
racetimer login:
Raspbian GNU/Linux 10 racetimer ttyS0
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ѥ▒▒Ɂlogin:
Raspbian GNU/Linux 10 racetimer ttyS0
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ѥ▒▒Ɂlogin:
Raspbian GNU/Linux 10 racetimer ttyS0
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ѥ▒▒Ɂlogin:
Raspbian GNU/Linux 10 racetimer ttyS0
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒@▒▒▒ѥ▒▒Ɂlogin:
Raspbian GNU/Linux 10 racetimer ttyS0
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ѥ▒▒Ɂlogin:
Raspbian GNU/Linux 10 racetimer ttyS0
4-fs error (device mmcblk0p2): ext4_lookup:1590: inode #21315: comm systemd: ige t: bad extra_isize 65535 (inode size 256)
[ 179.958102] EXT4-fs error (device mmcblk0p2): ext4_lookup:1590: inode #2065: comm rs:main Q:Reg: iget: bad extra_isize 65535 (inode size 256)
[ 179.988175] EXT4-fs error (device mmcblk0p2): ext4_lookup:1590: inode #21315: comm systemd: iget: bad extra_isize 65535 (inode size 256)
Raspbian GNU/Linux 10 racetimer ttyS0
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ѥ▒▒Ɂlogin:
Raspbian GNU/Linux 10 racetimer ttyS0
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ѥ▒▒Ɂlogin:
Raspbian GNU/Linux 10 racetimer ttyS0
so ive tried another sd card and the same happens .with the additional error lines now and then.
I haven’t got any nodes connected as I haven’t finished the build yet but im sure that’s not the problem .thanks for any help you can give me .
Very weird. How are you powering your pi? What is the current output?
its off the usb from pc .all working ok now im just triyng to update everything manually to the latest version from the 2.0.1 bad wifi connection is not fun with all this though :{
Cool. Yea I would recommend Ethernet
Hi Dean hope your’e well man ..Everything is working great with this timer ive got the external antenna installed and can connect over Ethernet too if i need to but im really struggling getting a wifi dongle working! Ive purchased one that is regocnised and is showing in ifconfig in wlan1 and i think the firmware is loaded ok but its the registering it on my network im having trouble with.. in the /etc/wpa_supplicant/wpa_supplicant.conf folder its empty and if i add credentials in there nothing happens .aloso same with /etc/wpa_supplicant/wpa_supplicant-wlan1.conf folder. I added stuff to the interfaces folder but then my ssh stopped working and i had to dig out the usb serial one again lol ..please help brother ,your’e much better at this than me .. cheers
Hi Nick
Can you post your WPA supplicant.
Also, is the wifi dongle acting as a client? And if so make sure the network you are connecting to is offering DHCP.
Thanks Dean, haven’t had chance to look recently but I had an idea to connect to my android phone via USB.. I cannot connect to it via ethernet as my phone doesn’t seem to pick it up using a ethernet to USB dongle. So I’ve managed to get the command line to connect to the broadcast ip using a USB cable and would like to know if I could adjust the broadcast of race timer to run out through the ip of the USB? Is this possible? Would be so much easier that way and I could get a 10m cable and have solid connection just unsung my phone.. Thanks for any help dude
Can you elaborate a little more. Are you trying to use an external AP connected via Ethernet?
Hi thanks for the guide! I used the image provided for 2.1.1 on a pi 3B+
The AP seems to be running out of the box, but the dnsmasq service fails to start.
The AP shows up and I can connect, but it just sits there “obtaining Ip address” and does nothing.
Any ideas? Reflash?
Also, just noticed the link to the 2.1.1 file is the same as the 2.1.0 beta 1…
Is there a link to the 2.1.1 image?
Many thanks!
Hey Jaemie.
Sorry the link is
https://mega.nz/file/77oSCAQa#dS9icw8gu9WxiH7Vo4kAIgMjwX1FcsmbRaCOHXX1iL0
Cheers.
Thanks Dean!
Pending this flash I have some RSSI issues. Is there a way I can chat or talk this issue through? I’m happy to pay for the help!
I’m in Australia if timezones are an issue.
You can throw your adapter on a static address on the 192.168.10.0/24 network.
Set a static IP on the adapter and your computer.
IP: 192.168.10.100
Mask: 255.255.255.0
No gateway or DNS
Try connect again and you should be able to ping or SSH 192.168.10.1.
Now you can check the issue with DNSMasq once connected.
I’m getting this error now…
● hostapd.service – Advanced IEEE 802.11 AP and IEEE 802.1X/WPA/WPA2/EAP Authenticator
Loaded: loaded (/lib/systemd/system/hostapd.service; enabled; vendor preset: enabled)
Active: activating (auto-restart) (Result: exit-code) since Mon 2020-05-25 06:32:14 BST; 879ms ago
Process: 774 ExecStart=/usr/sbin/hostapd -B -P /run/hostapd.pid -B $DAEMON_OPTS ${DAEMON_CONF} (code=exited, status=1/FAILURE)
why attached a wifi antenna before powering? without this mod there is also a open circruit and we powering it up where is the diffrent?
Sorry I dont understand your question. Cheers
When I start a race the laps aren’t being recorded. Sensor tuning seems good. Any ideas?
Make sure you are getting RSSI readouts on the tuning graph. Also make sure the peaks go above your enter at RSSI.