Skip to content

Commit

Permalink
Making the code overally better
Browse files Browse the repository at this point in the history
  • Loading branch information
JoyBed authored Mar 28, 2021
1 parent 2030578 commit b150fa3
Showing 1 changed file with 38 additions and 36 deletions.
74 changes: 38 additions & 36 deletions ESP32_Code/ESP32_Code.ino
Original file line number Diff line number Diff line change
Expand Up @@ -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
//////////////////////////////////////////////////////////
Expand Down Expand Up @@ -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
Expand All @@ -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
Expand All @@ -86,51 +83,53 @@ 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
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
Expand All @@ -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
Expand All @@ -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
Expand All @@ -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() {}

0 comments on commit b150fa3

Please sign in to comment.