Husarnet and Esp32 in action

adkarigar
3 min readNov 17, 2020

--

lets boot up….

For p2p communication with devices, lets spinup the Husarnet client
in both Linux as well as ESP32
follow the guide here for setup https://docs.husarnet.com/docs/begin-linux

I have added my laptop running linux and ESP32 to the husarnet , which can be seen via the husarnet dashboard. https://app.husarnet.com

this blog is about exploring the docs from husarnet.

adding linux to husarnet

create a network in https://app.husarnet.com

create network

get the join code from the add element button

Get Code from join code tab

join to husarnet from linux machine now

$ husarnet join fc94:b01d:1803:8dd8:b293:5c7d:7639:932a/xxxxxxxxxxxxxxxxxxxxxxx mydevice

lets add the esp32 device as well

Husarnet.join("fc94:b01d:1803:8dd8:b293:5c7d:7639:932a/xxxxxxxxxxxx", "esp32device");
Husarnet.start();

replace xxxxx with the code from join tab

lets demo the P2P communication from my linux and esp32

laptopServerUDP.py

import socketwith socket.socket(socket.AF_INET6, socket.SOCK_STREAM) as s:
s.bind((socket.gethostname(), 8002))
s.listen(1)
conn, addr = s.accept()
with conn:
print('Connected by', addr)
while True:
data = conn.recv(1024)
if not data: break
print(data.decode('ascii'))

husarnet-esp32.ino

#include <WiFi.h>
#include <Husarnet.h>
// WiFi credentials
const char* ssid = "<SSID-NAME>";
const char* password = "<SSID-PASSWORD>";
// Husarnet credentials
const char* hostName = "esp32demo";
const char* husarnetJoinCode = "fc94:b01d:1803:8dd8:b293:5c7d:7639:932a/xxxxxxxxxxxxxxx";
const char* dashboardURL = "default";
// Hostname of your laptop hosting a server
const char* laptopHostname = "mydevice";
void setup()
{
Serial.begin(115200);
/* Connect to WiFi */
Serial.printf("Connecting to %s", ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.printf("done\r\nlocal IP: %s", WiFi.localIP());/* Start Husarnet */
Husarnet.selfHostedSetup(dashboardURL);
Husarnet.join(husarnetJoinCode, hostName);
Husarnet.start();
}
void loop()
{
HusarnetClient client;
uint8_t buf[100];
int buf_s = 0;
int cnt = 0;
/* Try to connect to a server on port 8002 on your laptop */
if (!client.connect(laptopHostname, 8002)) {
Serial.printf("connection to \"%s\" failed\r\n", laptopHostname);
delay(1000);
return;
}
/* While connected send "Hello world!" + counter value */
while(client.connected()) {
buf_s = sprintf ((char*)buf, "Hello world! %d\r\n", cnt++);
client.write(buf,buf_s);
Serial.printf("sending: %s\r\n", (char*)buf);
delay(1000);
}
}

python3 laptopServerUDP.py

Connected by ('<ipV6_addr_esp32>', 50445, 0, 0)
Hello world! 0

Hello world! 1

Hello world! 2

Hello world! 3

Hello world! 4

Hello world! 5

Hello world! 6

Hello world! 7

Serial logs from arduino esp32

[10001133] initOnTcpThread
[10001134] bind -> 0
[10001138] ngsocket <ipaddrof esp32> listening on 5582
[10001146] Updating hosts file for esp32demo
[10001146] Updating hosts file for master
[10001149] write configdata (len: 381)
[10001221] sending join request to fc94:b01d:1803:8dd8:b293:5c7d:7639:932a
[10001224] waiting until base address is resolved...
[10001226] sending init request...
[10001235] sending join code request: [fc94:b01d:1803:8dd8:b293:5c7d:7639:932a] [xxxxxxxxxxxxxxxx>]
[10003375] HELLO from [<husarnetIP>]:5582 (id: fc94:b01d:1803:8dd8:b293:5c7d:7639:932a, active: YES)
[10003451] HELLO from [<husarnetIP>]:5582 (id: fc94:b01d:1803:8dd8:b293:5c7d:7639:932a, active: YES)
sending: Hello world! 0sending: Hello world! 1sending: Hello world! 2sending: Hello world! 3sending: Hello world! 4sending: Hello world! 5sending: Hello world! 6sending: Hello world! 7

lets check the husarnet dashboard once

esp32demo network with 2 elements

esp32demo network has 2 elements mydevice( linux machine ) , and esp32demo ( esp32 chip ).
NOTE: these names can be updated on the dashboard as well

Husarnet status

$ sudo husarnet status

Troubleshootings

  1. udp connections might not work in some network carriers
    all the above tests happened through mobile hotspots instead of router(broadband )
  2. in case of router, check in firewall.
  3. if mobile hotspot, try with different carriers, till successfull connections.

make sure to have a hands with this amazing chip ESP32….

that’s all folks take it easy…..

--

--

No responses yet