MakerGram Logo

    MakerGram

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

    how did sudo command solved can't open device "/dev/ttyUSB0": Permission denied?

    General Discussion
    arduino linux nodemcu
    2
    7
    2085
    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.
    • Abhay
      Abhay last edited by

      Please read full

      This is the most common or the most probable error you might have seen if you tried coding Arduino, nodeMCU etc in Arduino-ide.
      It might happen that when you upload a sketch - after you have selected your board and the serial port -, you get an error Error opening serial port ... If you get this error, we google it and the method to debug it is to set serial port permission.

      Screenshot from 2020-03-29 17-27-59.png

      this is the steps we followed to solve it. Even though the error stilled showed sometimes and had to use this code again.

      Since I try different distros of Linux sometimes I end up corrupting the old distro and reinstalling it from the beginning.
      This time I actually didn't follow these step but installed Arduino from the terminal using sudo apt install arduino command and run the code. The interface was completely different. The image below is the general interface of ide but installing it with sudo command give an ide with same screen but no setup{} or loop() part, a blank screen.
      Screenshot from 2020-03-29 17-42-34.png
      An error popped up about the port issue and solution to add the user to the group was mentioned in the terminal and followed the same command. After which the error never showed. I also snap installed arduino.

      Now my question is : By installing arduino using sudo command did I install ide or supporting libraries and why did the error stop?

      1 Reply Last reply Reply Quote 0
      • A
        arunksoman last edited by arunksoman

        1. Go to Arduino software
        2. Download Linnux 64-bit or 32-bit software
        3. Extract the Downloaded tar.xz file on your home directory.
        4. Navigate to your extracted file using cd command:
          cd arduino-1.8.12-linux64
        5. Make the install.sh file executable:
          sudo chmod +x install.sh
        6. Install arduino using shell script
          sudo ./install.sh
        7. Open Terminal and type:
          ls -l /dev/ttyACM*
          you will get something like:
          crw-rw---- 1 root dialout 188, 0 5 apr 23.01 ttyACM0
          The "0" at the end of ACM might be a different number, or multiple entries might be returned. The data we need is "dialout" (is the group owner of the file).
          Now we just need to add our user to the group:
          sudo usermod -a -G dialout <username>

        I believes it is a better way to solve your problem. Other way you to try to solve problem is install arduino via:
        sudo apt-get install arduino-core

        Abhay 1 Reply Last reply Reply Quote 2
        • Abhay
          Abhay @arunksoman last edited by

          @arunksoman thanks for the steps
          but the thing is I don't have issues with port now, I was curious how it got resolved without going through the usual steps but by using sudo command.

          A 1 Reply Last reply Reply Quote 0
          • A
            arunksoman @Abhay last edited by arunksoman

            @Abhay What did you mean by usual steps?

            Abhay 1 Reply Last reply Reply Quote 0
            • Abhay
              Abhay @arunksoman last edited by

              @arunksoman by usual steps I meant adding our user to the group.
              ie the step
              sudo usermod -a -G dialout <username>

              A 1 Reply Last reply Reply Quote 0
              • A
                arunksoman @Abhay last edited by

                @Abhay I think most probably you might have done this earlier while installing Arduino.

                Abhay 1 Reply Last reply Reply Quote 0
                • Abhay
                  Abhay @arunksoman last edited by

                  @arunksoman thanks,
                  I will look more into it. Thanks again

                  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