From 9d3d0326471c76795d8b62325824b58993d61f17 Mon Sep 17 00:00:00 2001 From: randogoth Date: Sat, 27 Jul 2024 17:05:36 +0300 Subject: [PATCH] Arduino init --- README.md | 13 +++- arduino/strix/strix.ino | 138 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 150 insertions(+), 1 deletion(-) create mode 100644 arduino/strix/strix.ino diff --git a/README.md b/README.md index 97641e1..526ac98 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,18 @@ Windows: ## FPGA Development -- In Quartus > Open Project > select `strix.qpf` from the `fpga/src` directory in this repo. +- Intel Quartus + - Open Project > select `strix.qpf` from the `fpga/src` directory in this repo. + +## MCU Development + +- Arduino IDE + - Boards Manager > Install 'Arduino SAMD Boards' (search for 'Vidor 4000') + - Library Manager > Install + - VidorPeripherals + - WiFiNINA (1.8.5, not higher) + - Open Project > `strix.ino` from the `arduino/strix` directory in this repo + ## TODO diff --git a/arduino/strix/strix.ino b/arduino/strix/strix.ino new file mode 100644 index 0000000..a992354 --- /dev/null +++ b/arduino/strix/strix.ino @@ -0,0 +1,138 @@ +#include +#include + +char ssid[] = "Strix"; +char pass[] = "owl12345678"; +int led = LED_BUILTIN; +int status = WL_IDLE_STATUS; +WiFiServer server(80); + +void setup() { + //Initialize serial and wait for port to open: + Serial.begin(9600); + while (!Serial) { + ; // wait for serial port to connect. Needed for native USB port only + } + + Serial.println("Access Point Web Server"); + + pinMode(led, OUTPUT); // set the LED pin mode + + // check for the WiFi module: + if (WiFi.status() == WL_NO_MODULE) { + Serial.println("Communication with WiFi module failed!"); + // don't continue + while (true); + } + + // by default the local IP address will be 192.168.4.1 + // you can override it with the following: + // WiFi.config(IPAddress(10, 0, 0, 1)); + + // print the network name (SSID); + Serial.print("Creating access point named: "); + Serial.println(ssid); + + // Create open network. Change this line if you want to create an WEP network: + status = WiFi.beginAP(ssid, pass); + if (status != WL_AP_LISTENING) { + Serial.println("Creating access point failed"); + // don't continue + while (true); + } + + // wait 10 seconds for connection: + delay(10000); + + // start the web server on port 80 + server.begin(); + + // you're connected now, so print out the status + printWiFiStatus(); +} + + +void loop() { + // compare the previous status to the current status + if (status != WiFi.status()) { + // it has changed update the variable + status = WiFi.status(); + + if (status == WL_AP_CONNECTED) { + // a device has connected to the AP + Serial.println("Device connected to AP"); + } else { + // a device has disconnected from the AP, and we are back in listening mode + Serial.println("Device disconnected from AP"); + } + } + + WiFiClient client = server.available(); // listen for incoming clients + + if (client) { // if you get a client, + digitalWrite(led, LOW); + Serial.println("new client"); // print a message out the serial port + String currentLine = ""; // make a String to hold incoming data from the client + while (client.connected()) { // loop while the client's connected + delayMicroseconds(10); // This is required for the Arduino Nano RP2040 Connect - otherwise it will loop so fast that SPI will never be served. + if (client.available()) { // if there's bytes to read from the client, + char c = client.read(); // read a byte, then + Serial.write(c); // print it out to the serial monitor + if (c == '\n') { // if the byte is a newline character + + // if the current line is blank, you got two newline characters in a row. + // that's the end of the client HTTP request, so send a response: + if (currentLine.length() == 0) { + // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK) + // and a content-type so the client knows what's coming, then a blank line: + client.println("HTTP/1.1 200 OK"); + client.println("Content-type:text/html"); + client.println(); + + // the content of the HTTP response follows the header: + client.print("STRIX"); + + // The HTTP response ends with another blank line: + client.println(); + // break out of the while loop: + break; + } + else { // if you got a newline, then clear currentLine: + currentLine = ""; + } + } + else if (c != '\r') { // if you got anything else but a carriage return character, + currentLine += c; // add it to the end of the currentLine + } + + // Check to see if the client request was "GET /H" or "GET /L": + if (currentLine.endsWith("GET /H")) { + ; + } + if (currentLine.endsWith("GET /L")) { + ; + } + } + } + // close the connection: + client.stop(); + digitalWrite(led, HIGH); + Serial.println("client disconnected"); + } +} + +void printWiFiStatus() { + // print the SSID of the network you're attached to: + Serial.print("SSID: "); + Serial.println(WiFi.SSID()); + + // print your WiFi shield's IP address: + IPAddress ip = WiFi.localIP(); + Serial.print("IP Address: "); + Serial.println(ip); + + // print where to go in a browser: + Serial.print("To see this page in action, open a browser to http://"); + Serial.println(ip); + +} \ No newline at end of file