From b150fa3b2afcbedc3652af10ef2e0d9b2ed7d697 Mon Sep 17 00:00:00 2001 From: JoyBed <46244284+JoyBed@users.noreply.github.com> Date: Sun, 28 Mar 2021 13:26:30 +0200 Subject: [PATCH] Making the code overally better --- ESP32_Code/ESP32_Code.ino | 74 ++++++++++++++++++++------------------- 1 file changed, 38 insertions(+), 36 deletions(-) diff --git a/ESP32_Code/ESP32_Code.ino b/ESP32_Code/ESP32_Code.ino index 6b6678bf..06f25706 100644 --- a/ESP32_Code/ESP32_Code.ino +++ b/ESP32_Code/ESP32_Code.ino @@ -5,7 +5,7 @@ // | | | | | | | | '_ \ / _ \______| | / _ \| | '_ \ // | |__| | |_| | | | | | (_) | | |___| (_) | | | | | // |_____/ \__,_|_|_| |_|\___/ \_____\___/|_|_| |_| -// Code for ESP32 boards v2.3 +// Code for ESP32 boards v2.4 // © Duino-Coin Community 2019-2021 // Distributed under MIT License ////////////////////////////////////////////////////////// @@ -42,22 +42,20 @@ void Task1code( void * pvParameters ){ Serial.println("\nCORE1 Connecting to Duino-Coin server..."); // Use WiFiClient class to create TCP connection WiFiClient client1; - Serial.println(client1.connect(host, port)); - Serial.println(); + client1.setTimeout(2); + Serial.println("CORE1 is connected: " + String(client1.connect(host, port))); String SERVER_VER = client1.readString(); // Server sends SERVER_VERSION after connecting digitalWrite(LED_BUILTIN, HIGH); // Turn off built-in led - delay(150); + delay(50); digitalWrite(LED_BUILTIN, LOW); // Turn on built-in led Serial.println("CORE1 Connected to the server. Server version: " + String(SERVER_VER)); - Serial.println(); digitalWrite(LED_BUILTIN, HIGH); // Turn off built-in led - delay(150); + delay(50); digitalWrite(LED_BUILTIN, LOW); // Turn on built-in led while (client1.connected()) { Serial.println("CORE1 Asking for a new job for user: " + String(ducouser)); - Serial.println(); client1.print("JOB," + String(ducouser) + ",ESP32"); // Ask for new job String hash1 = client1.readStringUntil(','); // Read data to the first peroid - last block hash @@ -75,7 +73,6 @@ void Task1code( void * pvParameters ){ byte shaResult1[20]; Serial.println("CORE1 Job received: " + String(hash1) + " " + String(job1) + " " + String(diff1)); - Serial.println(); unsigned long StartTime1 = micros(); // Start time measurement for (unsigned long iJob1 = 0; iJob1 < diff1; iJob1++) { // Difficulty loop @@ -86,25 +83,30 @@ void Task1code( void * pvParameters ){ esp_sha(SHA1, payload1, payloadLenght1, shaResult1); - int compareresult1 = memcmp(shaResult1, job11, sizeof(shaResult1)); - - if (compareresult1 == 0) { // If result is found + if (memcmp(shaResult1, job11, sizeof(shaResult1)) == 0) { // If result is found unsigned long EndTime1 = micros(); // End time measurement unsigned long ElapsedTime1 = EndTime1 - StartTime1; // Calculate elapsed time float ElapsedTimeMiliSeconds1 = ElapsedTime1 / 1000; // Convert to miliseconds float ElapsedTimeSeconds1 = ElapsedTimeMiliSeconds1 / 1000; // Convert to seconds float HashRate1 = iJob1 / ElapsedTimeSeconds1; // Calculate hashrate - client1.print(String(iJob1) + "," + String(HashRate1) + ",ESP32 CORE1 Miner v2.3," + String(rigname)); // Send result to server + client1.print(String(iJob1) + "," + String(HashRate1) + ",ESP32 CORE1 Miner v2.4," + String(rigname)); // Send result to server String feedback1 = client1.readStringUntil('\n'); // Receive feedback Shares1++; - Serial.println(String(feedback1) + " share #" + String(Shares1) + " (" + String(iJob1) + ")" + " Hashrate: " + String(HashRate1) + " Free RAM: " + String(ESP.getFreeHeap())); + Serial.println("CORE1 " + String(feedback1) + " share #" + String(Shares1) + " (" + String(iJob1) + ")" + " Hashrate: " + String(HashRate1)); + if (HashRate1 < 4000) { + Serial.println("CORE1 Low hashrate. Restarting core 1"); + client1.stop(); + xTaskCreatePinnedToCore(Task1code,"Task1",10000,NULL,1,&Task1,0); + vTaskDelete( NULL ); + } break; // Stop and ask for more work } } } - Serial.println("CORE1 Not connected. Restarting ESP"); - Serial.println(); - esp_restart(); // Restart the board + Serial.println("CORE1 Not connected. Restarting core 1"); + client1.stop(); + xTaskCreatePinnedToCore(Task1code,"Task1",10000,NULL,1,&Task1,0); + vTaskDelete( NULL ); } //Task2code @@ -112,25 +114,22 @@ void Task2code( void * pvParameters ){ unsigned int Shares = 0; // Share variable Serial.println("\nCORE2 Connecting to Duino-Coin server..."); - Serial.println(); // Use WiFiClient class to create TCP connection WiFiClient client; - Serial.println(client.connect(host, port)); - Serial.println(); + client.setTimeout(2); + Serial.println("CORE2 is connected: " + String(client.connect(host, port))); String SERVER_VER = client.readString(); // Server sends SERVER_VERSION after connecting digitalWrite(LED_BUILTIN, HIGH); // Turn off built-in led - delay(150); + delay(50); digitalWrite(LED_BUILTIN, LOW); // Turn on built-in led Serial.println("CORE2 Connected to the server. Server version: " + String(SERVER_VER)); - Serial.println(); digitalWrite(LED_BUILTIN, HIGH); // Turn off built-in led - delay(150); + delay(50); digitalWrite(LED_BUILTIN, LOW); // Turn on built-in led while (client.connected()) { Serial.println("CORE2 Asking for a new job for user: " + String(ducouser)); - Serial.println(); client.print("JOB," + String(ducouser) + ",ESP32"); // Ask for new job String hash = client.readStringUntil(','); // Read data to the first peroid - last block hash @@ -148,7 +147,6 @@ void Task2code( void * pvParameters ){ byte shaResult[20]; Serial.println("CORE2 Job received: " + String(hash) + " " + String(job) + " " + String(diff)); - Serial.println(); unsigned long StartTime = micros(); // Start time measurement for (unsigned long iJob = 0; iJob < diff; iJob++) { // Difficulty loop @@ -166,32 +164,37 @@ void Task2code( void * pvParameters ){ mbedtls_md_finish(&ctx, shaResult); mbedtls_md_free(&ctx); - int compareresult = memcmp(shaResult, job1, sizeof(shaResult)); - - if (compareresult == 0) { // If result is found + if (memcmp(shaResult, job1, sizeof(shaResult)) == 0) { // If result is found unsigned long EndTime = micros(); // End time measurement unsigned long ElapsedTime = EndTime - StartTime; // Calculate elapsed time float ElapsedTimeMiliSeconds = ElapsedTime / 1000; // Convert to miliseconds float ElapsedTimeSeconds = ElapsedTimeMiliSeconds / 1000; // Convert to seconds float HashRate = iJob / ElapsedTimeSeconds; // Calculate hashrate - client.print(String(iJob) + "," + String(HashRate) + ",ESP32 CORE2 Miner v2.3," + String(rigname)); // Send result to server + client.print(String(iJob) + "," + String(HashRate) + ",ESP32 CORE2 Miner v2.4," + String(rigname)); // Send result to server String feedback = client.readStringUntil('\n'); // Receive feedback Shares++; - Serial.println(String(feedback) + " share #" + String(Shares) + " (" + String(iJob) + ")" + " Hashrate: " + String(HashRate) + " Free RAM: " + String(ESP.getFreeHeap())); + Serial.println("CORE2 " + String(feedback) + " share #" + String(Shares) + " (" + String(iJob) + ")" + " Hashrate: " + String(HashRate)); + if (HashRate < 4000) { + Serial.println("CORE2 Low hashrate. Restarting core 2"); + client.stop(); + xTaskCreatePinnedToCore(Task2code,"Task2",10000,NULL,2,&Task2,1); + vTaskDelete( NULL ); + } break; // Stop and ask for more work } } } - Serial.println("CORE2 Not connected. Restarting ESP"); - Serial.println(); - esp_restart(); // Restart the board + Serial.println("CORE2 Not connected. Restarting core 2"); + client.stop(); + xTaskCreatePinnedToCore(Task2code,"Task2",10000,NULL,2,&Task2,1); + vTaskDelete( NULL ); } void setup() { disableCore0WDT(); disableCore1WDT(); Serial.begin(115200); // Start serial connection - Serial.println("\n\nDuino-Coin ESP32 Miner v2.3"); + Serial.println("\n\nDuino-Coin ESP32 Miner v2.4"); Serial.println("Connecting to: " + String(ssid)); WiFi.mode(WIFI_STA); // Setup ESP in client mode WiFi.begin(ssid, password); // Connect to wifi @@ -202,11 +205,10 @@ void setup() { } Serial.println("\nConnected to WiFi!"); Serial.println("Local IP address: " + WiFi.localIP().toString()); - Serial.println(); xTaskCreatePinnedToCore(Task1code,"Task1",10000,NULL,1,&Task1,0); //create a task with priority 1 and executed on core 0 - delay(500); + delay(250); xTaskCreatePinnedToCore(Task2code,"Task2",10000,NULL,2,&Task2,1); //create a task with priority 2 and executed on core 1 - delay(500); + delay(250); } void loop() {}