forked from tinygo-org/drivers
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Verified on Arduino Nano33 IoT and nina fw v1.4.5
- Loading branch information
1 parent
b869d27
commit 67b8a34
Showing
6 changed files
with
254 additions
and
51 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,156 @@ | ||
// This example opens a TCP connection using a device with WiFiNINA firmware | ||
// and sends a HTTPS request to retrieve a webpage | ||
// | ||
// You shall see "strict-transport-security" header in the response, | ||
// this confirms communication is indeed over HTTPS | ||
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security | ||
// | ||
package main | ||
|
||
import ( | ||
"fmt" | ||
"machine" | ||
"strings" | ||
"time" | ||
|
||
"tinygo.org/x/drivers/net" | ||
"tinygo.org/x/drivers/net/tls" | ||
"tinygo.org/x/drivers/wifinina" | ||
) | ||
|
||
// access point info | ||
const ssid = "" | ||
const pass = "" | ||
|
||
// IP address of the server aka "hub". Replace with your own info. | ||
const server = "tinygo.org" | ||
|
||
// these are the default pins for the Arduino Nano33 IoT. | ||
// change these to connect to a different UART or pins for the ESP8266/ESP32 | ||
var ( | ||
|
||
// these are the default pins for the Arduino Nano33 IoT. | ||
uart = machine.UART2 | ||
tx = machine.NINA_TX | ||
rx = machine.NINA_RX | ||
spi = machine.NINA_SPI | ||
|
||
// this is the ESP chip that has the WIFININA firmware flashed on it | ||
adaptor *wifinina.Device | ||
) | ||
|
||
var buf [256]byte | ||
|
||
var lastRequestTime time.Time | ||
var conn net.Conn | ||
|
||
func setup() { | ||
uart.Configure(machine.UARTConfig{TX: tx, RX: rx}) | ||
|
||
// Configure SPI for 8Mhz, Mode 0, MSB First | ||
spi.Configure(machine.SPIConfig{ | ||
Frequency: 8 * 1e6, | ||
SDO: machine.NINA_SDO, | ||
SDI: machine.NINA_SDI, | ||
SCK: machine.NINA_SCK, | ||
}) | ||
|
||
adaptor = wifinina.New(spi, | ||
machine.NINA_CS, | ||
machine.NINA_ACK, | ||
machine.NINA_GPIO0, | ||
machine.NINA_RESETN) | ||
adaptor.Configure() | ||
} | ||
|
||
func main() { | ||
|
||
setup() | ||
|
||
waitSerial() | ||
|
||
connectToAP() | ||
|
||
for { | ||
readConnection() | ||
if time.Now().Sub(lastRequestTime).Milliseconds() >= 10000 { | ||
makeHTTPSRequest() | ||
} | ||
} | ||
|
||
} | ||
|
||
// Wait for user to open serial console | ||
func waitSerial() { | ||
for !machine.UART0.DTR() { | ||
time.Sleep(100 * time.Millisecond) | ||
} | ||
} | ||
|
||
func readConnection() { | ||
if conn != nil { | ||
for n, err := conn.Read(buf[:]); n > 0; n, err = conn.Read(buf[:]) { | ||
if err != nil { | ||
println("Read error: " + err.Error()) | ||
} else { | ||
print(string(buf[0:n])) | ||
} | ||
} | ||
} | ||
} | ||
|
||
func makeHTTPSRequest() { | ||
|
||
var err error | ||
if conn != nil { | ||
conn.Close() | ||
} | ||
|
||
message("\r\n---------------\r\nDialing TCP connection") | ||
conn, err = tls.Dial("tcp", server, nil) | ||
for ; err != nil; conn, err = tls.Dial("tcp", server, nil) { | ||
message("Connection failed: " + err.Error()) | ||
time.Sleep(5 * time.Second) | ||
} | ||
println("Connected!\r") | ||
|
||
print("Sending HTTPS request...") | ||
fmt.Fprintln(conn, "GET / HTTP/1.1") | ||
fmt.Fprintln(conn, "Host:", strings.Split(server, ":")[0]) | ||
fmt.Fprintln(conn, "User-Agent: TinyGo") | ||
fmt.Fprintln(conn, "Connection: close") | ||
fmt.Fprintln(conn) | ||
println("Sent!\r\n\r") | ||
|
||
lastRequestTime = time.Now() | ||
} | ||
|
||
// connect to access point | ||
func connectToAP() { | ||
if len(ssid) == 0 || len(pass) == 0 { | ||
for { | ||
println("Connection failed: Either ssid or password not set") | ||
time.Sleep(10 * time.Second) | ||
} | ||
} | ||
time.Sleep(2 * time.Second) | ||
message("Connecting to " + ssid) | ||
adaptor.SetPassphrase(ssid, pass) | ||
for st, _ := adaptor.GetConnectionStatus(); st != wifinina.StatusConnected; { | ||
message("Connection status: " + st.String()) | ||
time.Sleep(1 * time.Second) | ||
st, _ = adaptor.GetConnectionStatus() | ||
} | ||
message("Connected.") | ||
time.Sleep(2 * time.Second) | ||
ip, _, _, err := adaptor.GetIP() | ||
for ; err != nil; ip, _, _, err = adaptor.GetIP() { | ||
message(err.Error()) | ||
time.Sleep(1 * time.Second) | ||
} | ||
message(ip.String()) | ||
} | ||
|
||
func message(msg string) { | ||
println(msg, "\r") | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.