Sitemap

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