MakerGram Logo

    MakerGram

    • Register
    • Login
    • Search
    • Categories
    • Recent
    • Popular
    • Tags
    • Users
    • Groups

    Edge Impulse Inference to IoT Dashboard

    General Discussion
    edge impulse
    2
    12
    1274
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • D
      dipu_varghese @salmanfaris last edited by

      Hi @salmanfaris

      Thank you for sharing these two methods to take data/output information to the cloud. It's very helpful, and I appreciate your willingness to share your knowledge and expertise.

      Regarding the second method, could you please clarify what kind of processing and cleaning of data needs to be done before pushing it to the cloud? Thank you!

      Best,
      Dipu

      salmanfaris 1 Reply Last reply Reply Quote 0
      • salmanfaris
        salmanfaris @dipu_varghese last edited by

        @dipu_varghese The serial data from the prebuilt inferencing binary will be a little big with string size as it comes with all inferencing data points and it's confidence level plus the model information, you might only need the inferencing score or the inferencing data, so you can filter that out and send that to the cloud. Hope you get the idea. Let me know if you need an example.

        D 1 Reply Last reply Reply Quote 0
        • D
          dipu_varghese @salmanfaris last edited by

          Thank you for your response! @salmanfaris πŸ™‚

          It makes sense that filtering out the specific data points that are needed and sending them to the cloud would be the way to go.

          If it's not too much trouble, could you please provide me with an example of how to filter out and send only the necessary inferencing data to the cloud?

          Thank you again for your help!

          Best,
          Dipu

          salmanfaris 1 Reply Last reply Reply Quote 0
          • salmanfaris
            salmanfaris @dipu_varghese last edited by

            @dipu_varghese Sure, I'll try to make an example in one coming day and share.

            D 2 Replies Last reply Reply Quote 0
            • D
              dipu_varghese @salmanfaris last edited by

              @salmanfaris I really appreciate your help and look forward to seeing the example.

              Best,
              Dipu

              D 1 Reply Last reply Reply Quote 0
              • D
                dipu_varghese @dipu_varghese last edited by

                @salmanfaris Hope you're doing well, did you get sometime to work on this?

                Best,
                Dipu

                1 Reply Last reply Reply Quote 0
                • D
                  dipu_varghese @salmanfaris last edited by

                  @salmanfaris any updates?

                  Best,
                  Dipu

                  salmanfaris 1 Reply Last reply Reply Quote 0
                  • salmanfaris
                    salmanfaris @dipu_varghese last edited by salmanfaris

                    Hi @dipu_varghese ,

                    Here is the sample input from the binary edge impulse inference,

                    Predictions (DSP: 16 ms., Classification: 1 ms., Anomaly: 2 ms.):
                    idle: 0.91016
                    snake: 0.08203
                    updown: 0.00391
                    wave: 0.00391
                    anomaly score: -0.067”
                    

                    And from here for example we can try to get the updown values only by attaching the device to another controller and read the Serial string directly.

                    void setup() {
                      // Start serial communication at 9600 baud
                      Serial.begin(9600);
                    }
                    
                    void loop() {
                      // Wait until there is data available on the serial port
                      while (!Serial.available()) {
                        // Do nothing
                      }
                    
                      // Read the input string from the serial port
                      String inputString = Serial.readStringUntil('\n');
                    
                      // Find the position of the "updown" value in the input string
                      int updownPos = inputString.indexOf("updown:");
                    
                      // If the "updown" value was found in the input string
                      if (updownPos >= 0) {
                        // Extract the "updown" value from the input string
                        String updownString = inputString.substring(updownPos + 8, inputString.indexOf('\n', updownPos));
                    
                    // Convert the "updown" value to a float
                        float updownValue = updownString.toFloat();
                    
                     // Output the "updown" value
                        Serial.println(updownValue);
                      }
                    }
                    

                    The sketch should then output the "updown" value, which is 0.08203.

                    Hope this will be helpful, let me know if you need more clarification.

                    D 1 Reply Last reply Reply Quote 0
                    • D
                      dipu_varghese @salmanfaris last edited by

                      @salmanfaris thank you so much man, I'll try this and update you shortly. Thank you once again.

                      Best,
                      Dipu

                      salmanfaris 1 Reply Last reply Reply Quote 1
                      • salmanfaris
                        salmanfaris @dipu_varghese last edited by

                        @dipu_varghese Hi, How does it go? Would like to know about the updates πŸ™‚ or anything I can do to help you.

                        1 Reply Last reply Reply Quote 0
                        • First post
                          Last post

                        Recent Posts

                        • R

                          I am trying to set up a janus webrtc to stream an RTSP to an HTML page.
                          I have followed the getting-started steps by Janus-gateway official github repo.

                          Since I am new to web development. I do not understand how to host the Webrtc server. can anyone guide me to set up an HTML page that can display a video stream from an RTSP server using janus webrtc?

                          • read more
                        • @zainmuhammed Can try capturing the GPS when the device is starting the loop instead after joining the LoRaWAN and see?

                          You can put the GPS value on top of the loop or setup function.

                          Also, what kind of gateway are you using? Is it configured okay, OTA is done?

                          • read more
                        • @salmanfaris Today I tried after connecting a 18650 cell,
                          WhatsApp Image 2024-04-12 at 10.40.06_c7d1947e.jpg WhatsApp Image 2024-04-12 at 10.40.05_897b8bb6.jpg
                          Data getting in console after integration of both lora and gps.
                          3f45cfe7-0061-4328-8c55-ef0a73385203-image.png
                          here you can see that GPS value is 0,0. also in my previous post you can see that GPS value is not reading.
                          Also the status LED is active after it is connected to the satellite.

                          • read more
                        • Hi @zainmuhammed ,

                          Can you share the GPS and LoRa output when it’s working?

                          Also can try capturing the GPS when the device is starting the loop instead after joining the LoRaWAN and see?

                          Also make sure the device provides have enough to modules. The GPS need more power when you cold start.

                          • read more
                        • @zainmuhammed
                          this is the code

                          #include <Arduino.h> #include <U8x8lib.h> #include <TinyGPS++.h> #include <SoftwareSerial.h> static const int RXPin = 1, TXPin = 2; static const uint32_t GPSBaud = 9600; // The TinyGPS++ object TinyGPSPlus gps; // The serial connection to the GPS device SoftwareSerial ss(RXPin, TXPin); U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(/*reset=*/U8X8_PIN_NONE); // U8X8_SSD1306_128X64_NONAME_SW_I2C u8x8(/*clock=*/ SCL, /*data=*/ SDA, /*reset=*/ U8X8_PIN_NONE); // OLEDs without Reset of the Display static char recv_buf[512]; static bool is_exist = false; static bool is_join = false; static int led = 0; static int at_send_check_response(char *p_ack, int timeout_ms, char *p_cmd, ...) { int ch; int num = 0; int index = 0; int startMillis = 0; va_list args; char cmd_buffer[256]; // Adjust the buffer size as needed memset(recv_buf, 0, sizeof(recv_buf)); va_start(args, p_cmd); vsprintf(cmd_buffer, p_cmd, args); // Format the command string Serial1.print(cmd_buffer); Serial.print(cmd_buffer); va_end(args); delay(200); startMillis = millis(); if (p_ack == NULL) { return 0; } do { while (Serial1.available() > 0) { ch = Serial1.read(); recv_buf[index++] = ch; Serial.print((char)ch); delay(2); } if (strstr(recv_buf, p_ack) != NULL) { return 1; } } while (millis() - startMillis < timeout_ms); return 0; } static void recv_prase(char *p_msg) { if (p_msg == NULL) { return; } char *p_start = NULL; int data = 0; int rssi = 0; int snr = 0; p_start = strstr(p_msg, "RX"); if (p_start && (1 == sscanf(p_start, "RX: \"%d\"\r\n", &data))) { Serial.println(data); u8x8.setCursor(2, 4); u8x8.print("led :"); led = !!data; u8x8.print(led); if (led) { digitalWrite(LED_BUILTIN, LOW); } else { digitalWrite(LED_BUILTIN, HIGH); } } p_start = strstr(p_msg, "RSSI"); if (p_start && (1 == sscanf(p_start, "RSSI %d,", &rssi))) { u8x8.setCursor(0, 6); u8x8.print(" "); u8x8.setCursor(2, 6); u8x8.print("rssi:"); u8x8.print(rssi); } p_start = strstr(p_msg, "SNR"); if (p_start && (1 == sscanf(p_start, "SNR %d", &snr))) { u8x8.setCursor(0, 7); u8x8.print(" "); u8x8.setCursor(2, 7); u8x8.print("snr :"); u8x8.print(snr); } } void setup(void) { u8x8.begin(); u8x8.setFlipMode(1); u8x8.setFont(u8x8_font_chroma48medium8_r); ss.begin(GPSBaud); Serial.begin(GPSBaud); pinMode(LED_BUILTIN, OUTPUT); digitalWrite(LED_BUILTIN, HIGH); Serial1.begin(9600); Serial.print("E5 LORAWAN TEST\r\n"); u8x8.setCursor(0, 0); if (at_send_check_response("+AT: OK", 100, "AT\r\n")) { is_exist = true; at_send_check_response("+ID: DevEui", 1000, "AT+ID=DevEui,\"xxxxx\"\r\n"); // replace 'xxxxxxxxxxxxx' with your DevEui at_send_check_response("+ID: AppEui", 1000, "AT+ID=AppEui,\"xxxxxxx\"\r\n"); // replace 'xxxxxxxxxxxxx' with your AppEui at_send_check_response("+KEY: APPKEY", 1000, "AT+KEY=APPKEY,\"xxxxxxxxx\"\r\n"); // replace 'xxxxxxxxxxxxx' with your AppKey at_send_check_response("+ID: DevAddr", 1000, "AT+ID=DevAddr\r\n"); at_send_check_response("+ID: AppEui", 1000, "AT+ID\r\n"); at_send_check_response("+MODE: LWOTAA", 1000, "AT+MODE=LWOTAA\r\n"); at_send_check_response("+DR: IN865", 1000, "AT+DR=IN865\r\n"); // Change FREQ as per your location at_send_check_response("+CH: NUM", 1000, "AT+CH=NUM,0-2\r\n"); at_send_check_response("+CLASS: C", 1000, "AT+CLASS=A\r\n"); at_send_check_response("+PORT: 8", 1000, "AT+PORT=8\r\n"); delay(200); u8x8.setCursor(5, 0); u8x8.print("LoRaWAN"); is_join = true; } else { is_exist = false; Serial.print("No E5 module found.\r\n"); u8x8.setCursor(0, 1); u8x8.print("unfound E5 !"); } u8x8.setCursor(2, 4); u8x8.print("led :"); u8x8.print(led); } void loop(void) { if (is_exist) { int ret = 0; if (is_join) { ret = at_send_check_response("+JOIN: Network joined", 12000, "AT+JOIN\r\n"); if (ret) { is_join = false; } else { at_send_check_response("+ID: AppEui", 1000, "AT+ID\r\n"); Serial.print("JOIN failed!\r\n\r\n"); delay(5000); } } else { gps.encode(ss.read()); float a=gps.location.lat(); float b=gps.location.lng(); Serial.println(a); Serial.println(b); char cmd[128]; sprintf(cmd, "AT+CMSGHEX=\"%04X%04X\"\r\n", (float)a,(float)b); ret = at_send_check_response("Done", 5000, cmd); if (ret) { recv_prase(recv_buf); } else { Serial.print("Send failed!\r\n\r\n"); } delay(5000); } } else { delay(1000); } }

                          9135d5d3-6277-4c60-81df-a2acac65c93d-image.png

                          • read more
                        By MakerGram | A XiStart Initiative | Built with ♥ NodeBB
                        Copyright © 2023 MakerGram, All rights reserved.
                        Privacy Policy | Terms & Conditions | Disclaimer | Code of Conduct