Successful bring up of HaLow on a Raspberry Pi Zero 2W with NAT forwarding!

Hi all,

I’ve been tinkering with the MM6108-based Heltec HT-HC01P SPI module, and I was able to successfully bring up HaLow on the Pi Zero 2W. I’ve set it up to enable NAT forwarding, and I’m using a Heltec dongle as a STA. Notably, on 915.5 with 1MHz bandwidth, I’ve been able to achieve 1-3mbps at some incredible range (ie. through several apartment walls over 300-500m) using just a UF.L patch antenna.

In an attempt to help make this wonderful technology by Morse Micro available to the world, I’ve created a repository with instructions and scripts to replicate my work. It’s based on the most recent driver release (1.16.x) for the Linux 6.12 kernel.

For those interested in replicating, the hardest part is honestly the wiring, upon a successful bring up you should be able to get to this point:

A quick speedtest at 923 MHz w/ 2MHz bandwidth - The device is capable of a faster link but I’m interested in optimizing for range so I haven’t tried pushing the limits with a wider bandwidth and higher SPI clock speed.

My next step is to develop a HAT to make it easier to interface with the Pi, and then to package all of this into a user-friendly interface (all of which of course would be open source) to help bring exposure to this fascinating new technology. As a hobbyist whose career is in healthcare, I see so much potential for this technology to improve communication and peoples’ lives, and I really want to help make this more accessible. Many thanks for reading, and for those of you who would like to replicate my setup, let me know if you have any questions!

8 Likes

The RPi Zero 2W has been a popular ask. Nice work!

1 Like

Thank you! I’m looking forward to updating everyone with progress on the HAT and publishing those files :slight_smile:

Nice! Are you able to use 50MHz for the SPI speed with no issue?

I’ve successfully integrate a Seeedstudio xiao module with RPi Zero 2W, but limited to 10MHz. I suspect my wiring is the cause of the issue.

In my testing I haven’t been able to do 50MHz but I have been stable at 24MHz. I also suspect my wiring as the issue as I’m currently using 20cm dupont cables for my connection. I have a prototype PCB on the way that will have much shorter traces for the data lines. If it works I will upload the KiCad files. Will update the post and share how well it works!

Yes, that sounds like my current setup. Interestingly enough if I enable debug message (debug_mask=1) I am able to do 50MHz, but probably the debug message causes slowdown somewhere.

Sounds good, you beat me to it! Looking forward to hear that update.

1 Like

This is absolutely awesome, will this setup support meshing do you think?

Thank you! Yes, at the driver level it definitely should, I just haven’t gotten a chance to spin up wpa_supplicant and give it a go yet. Putting the scripts in place to make it an easy toggle on/off is one of my next steps.

Hi all,

Just wanted to provide updates for anyone following this project. First off I’m so happy to see that people are using and liking this setup! Instead of AP/STA mode, I updated the scripts to configure mesh on both sides with one side acting as a gateway, and one side acting as a client. This does result in decreased throughput compared to AP/STA but my vision is to develop this into a user friendly, open source product with app support and I sadly only have time to focus on so much right now. If someone wants to submit that functionality to the repo please feel more than welcome.

Right now the mesh mode should be fully functional, in that you should be able to connect the gateway to a home network, set up a hotspot with the client, and access the internet. If anyone has any issues please let me know on the github page and I’ll try to fix ASAP. I’m working now on app support to interface and configure over bluetooth/webserver so users don’t have to deal with the scripts directly. Open to all thoughts, comments, and suggestions!

2 Likes

@yousefk Have you developed a PCB layout for this yet? I would love to talk more with you about a project that could use this.

I have! The KiCad files are here:

I’ve tested it and it works beautifully, even at 50MHz for the SPI clock speed. I’m having them manufactured by PCBway for a product I plan to launch soon. I’d be happy to chat and, if you’re in the US, send you one to see if it works for your project. DM me if interested

2 Likes

@yousefk Very cool project! I am looking to do essentially the same thing. For the Halow module, it says “the host must support level-triggered interrupts” which I understand the Pi Zero 2W does not support. Have you created a work around or is that not a problem in your design? I wonder if this is going to be a problem such as errors or increased latency.

Thanks for the work @yousefk I’m actually going through your repo today and I’ll see how far I get. I tested the prebuilt image and that worked but I’m going to run all the scripts manually as well. May do a slightly different PCB but I also greatly appreciate those files.

EDIT: Zero issues! I did not worry about the web UI and stopped after I had wlan1 up and going. The plan is to use these as extender nodes with my pi5s on the edges of the mesh.

root@pizero2w-halow:~# wpa_supplicant_s1g -D nl80211 -i wlan1 -c test.conf 
Successfully initialized wpa_supplicant
S1G mapped HT channel 122
S1G mapped HT channel 122
wlan1: mesh: ieee80211w:2 PMF:0
Full Channel Information
	Operating Frequency: 918000 kHz
	Operating BW: 4 MHz
	Primary BW: 2 MHz
	Primary Channel Index: 1
wlan1: interface state UNINITIALIZED->ENABLED
wlan1: AP-ENABLED 
wlan1: joining mesh REDACTED
wlan1: CTRL-EVENT-CONNECTED - Connection to 0c:bf:74:11:22:33 completed [id=0 id_str=]
wlan1: MESH-GROUP-STARTED ssid="REDACTED" id=0
wlan1: new peer notification for 3c:22:7f:11:22:33
wlan1: mesh plink with 3c:22:7f:11:22:33 established
wlan1: MESH-PEER-CONNECTED 3c:22:7f:11:22:33

1 Like

Glad to see continued interest in my project! I did add a line to the device tree overlay for the SPI module #26 ( spi-irq-gpios = <&gpio 25 0>) and I assumed that the interrupt function was built into the SPI drivers for the raspberry pi. I haven’t done much to verify that, however, because I’ve been able to use the HaLow connection without errors, although I can’t speak to whether it’s caused increased latency. Please do let me know if you find more info on this.

1 Like

So glad it’s working for you!! It’s such a beautiful sight to see the wlan1 network successfully brought up. I built in the web UI to try to make it more simple for people just dipping their feet into HaLow - but do you think it would be helpful if I added a section in the GitHub README with instructions on configuring the device without the web UI? Or did you feel like it was pretty intuitive to figure out how to go through the setup process without running the web UI and display scripts?

Being more familiar with setting up Halow on pis and comfortability on the cli, I found it easy because I was looking at the .sh scripts before executing them. You could add a line that says “stop here if you don’t need the UI” but otherwise it was straight forward.

1 Like

Hi,

I’m trying to use your Raspberry Pi Zero 2W + Heltec MM6108 HaLow setup with the Morse Micro hostapd.
I have the board in SPI mode, and I’m running your “hostapd_s1g” (Morse Micro v2.12) binary on the Pi.
My HaLow interface shows as “wlan1”.

However, whenever I try to start hostapd with my config file, I get these errors:

Code
Line 3: unknown hw_mode ‘s1g’
Unknown S1G operating class 0
Invalid s1g config of oper class, country code and channel

or, if I use “hw_mode=ah”, similar errors.

I’ve tried removing the “hw_mode” line completely.

My config file is currently:

Code
interface=wlan1
ssid=HaLow_AP
channel=4
ieee80211ah=1
country_code=US
wpa=2
wpa_key_mgmt=WPA-PSK
wpa_passphrase=mysecretpassword
But hostapd still fails to start and gives the errors above.

Could you please tell me:

What should my hostapd config file look like for the HaLow interface?
Are there any lines or settings I should remove or change?
Do I need a particular version of the hostapd binary or specific options?
I’m not very computer savvy, so any instructions or screenshots would help a lot!

Thank you so much for your help and for creating this project.

— Mike

1 Like

Try the hostapd config from page 18/22 in the Morse Micro app note. I had luck with hostapd starting using that.

Im interested in getting the Vantron mm8108 USB dongle working with a pi zero 2w. Should receive the dongle in a couple weeks, cant wait to get started.

2 Likes