Error in command line need pyserial path as 1st arg and esptool path as 2nd

- Fri Apr 05, 2019 11:44 am #81581 I’m using LoLIN NodeMCU V3, ESP8266 12E, and Arduino IDE 1.8.9. When i uploading program, the Error occurred:python /Applications/Arduino.app/Contents/Java/hardware/esp8266com/esp8266/tools/upload.py --chip esp8266 --port /dev/cu.wchusbserial1a1230 --baud 115200 --trace version --end --chip esp8266 --port /dev/cu.wchusbserial1a1230 --baud 115200 --trace write_flash 0x0 /var/folders/hf/1pgb0bfj1bjblvw7035mlllc0000gn/T/arduino_build_14437/sketch_apr05a.ino.bin --end Error in command line, need pyserial path as 1st arg and esptool path as 2nd.And I kown this error occured in file upload.py, because import esptool failed.sys.argv.pop(0) # Remove executable nametoolspath = os.path.dirname(os.path.realpath(__file__)).replace('\', '/') # CWD in UNIX formattry: sys.path.append(toolspath + "/pyserial") # Add pyserial dir to search path sys.path.append(toolspath + "/esptool") # Add esptool dir to search path # sys.path.insert(0, toolspath + "/pyserial") # Add pyserial dir to search path # sys.path.insert(0, toolspath + "/esptool") # Add esptool dir to search path import esptool # If this fails, we can't continue and will bomb belowexcept: sys.stderr.write("Error in command line, need pyserial path as 1st arg and esptool path as 2nd.n") sys.exit(1)I run get.py in esp8266>tools, and there is not have the esptool and pyserial download path in file package_esp8266com_index.template.json. Please tell me what should i do to fix this problem.

Fri Apr 05, 2019 11:44 am
#81581

I’m using LoLIN NodeMCU V3, ESP8266 12E, and Arduino IDE 1.8.9. When i uploading program, the Error occurred:
python /Applications/Arduino.app/Contents/Java/hardware/esp8266com/esp8266/tools/upload.py —chip esp8266 —port /dev/cu.wchusbserial1a1230 —baud 115200 —trace version —end —chip esp8266 —port /dev/cu.wchusbserial1a1230 —baud 115200 —trace write_flash 0x0 /var/folders/hf/1pgb0bfj1bjblvw7035mlllc0000gn/T/arduino_build_14437/sketch_apr05a.ino.bin —end
Error in command line, need pyserial path as 1st arg and esptool path as 2nd.

And I kown this error occured in file upload.py, because import esptool failed.
sys.argv.pop(0) # Remove executable name
toolspath = os.path.dirname(os.path.realpath(__file__)).replace(‘\’, ‘/’) # CWD in UNIX format
try:
sys.path.append(toolspath + «/pyserial») # Add pyserial dir to search path
sys.path.append(toolspath + «/esptool») # Add esptool dir to search path
# sys.path.insert(0, toolspath + «/pyserial») # Add pyserial dir to search path
# sys.path.insert(0, toolspath + «/esptool») # Add esptool dir to search path
import esptool # If this fails, we can’t continue and will bomb below
except:
sys.stderr.write(«Error in command line, need pyserial path as 1st arg and esptool path as 2nd.n»)
sys.exit(1)

I run get.py in esp8266>tools, and there is not have the esptool and pyserial download path in file package_esp8266com_index.template.json.
Please tell me what should i do to fix this problem.

Here is the full error (my name has been replaced with the text name for privacy)

Arduino: 1.8.13 (Mac OS X), Board: "LOLIN(WEMOS) D1 R2 & mini, 80 MHz, Flash, Legacy (new can return nullptr), All SSL ciphers (most compatible), 4MB (FS:1MB OTA:~1019KB), v2 Lower Memory, Disabled, None, Only Sketch, 460800"

[SPIFFS] data    : /Users/name/Documents/wemos_code/data
[SPIFFS] size    : 1000
[SPIFFS] page    : 256
[SPIFFS] block   : 8192
/favicon.ico
/css/bootstrap.min.css
/css/styles.css
/css/dark-mode.css
/css/minicolors.min.css
/images/atom196.png
/images/github.ico
/images/surr.png
/js/dark-mode-switch.min.js
/js/r-websocket.min.js
/js/bootstrap.min.js
/js/jquery-3.1.1.min.js
/js/minicolors.min.js
/js/app.js
/index.htm
/fonts/glyphicons.woff2
[SPIFFS] upload  : /var/folders/k5/vtb2y3j92qs38gl_dxdkql3r0000gq/T/arduino_build_846103/wemos_code.spiffs.bin
[SPIFFS] address  : 0x300000
[SPIFFS] reset    : --before default_reset --after hard_reset
[SPIFFS] port     : /dev/cu.usbserial-14510
[SPIFFS] speed    : 460800
[SPIFFS] python   : /Users/name/Library/Arduino15/packages/esp8266/tools/python3/3.7.2-post1/python3
[SPIFFS] uploader : /Users/name/Library/Arduino15/packages/esp8266/hardware/esp8266/2.6.0/tools/upload.py

Error in command line, need pyserial path as 1st arg and esptool path as 2nd.
SPIFFS Upload failed!

Recommend Projects

  • React photo

    React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo

    Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo

    Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo

    TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo

    Django

    The Web framework for perfectionists with deadlines.

  • Laravel photo

    Laravel

    A PHP framework for web artisans

  • D3 photo

    D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Visualization

    Some thing interesting about visualization, use data art

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo

    Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo

    Microsoft

    Open source projects and samples from Microsoft.

  • Google photo

    Google

    Google ❤️ Open Source for everyone.

  • Alibaba photo

    Alibaba

    Alibaba Open Source for everyone

  • D3 photo

    D3

    Data-Driven Documents codes.

  • Tencent photo

    Tencent

    China tencent open source team.

  • #21

У sdk версии 2.6.1 отличается upload.py от того же upload.py что в версии 2.5.2
Кроме этого в 2.6.1 загрузчик esptool.py версии v2.8 а в 2.5.2 esptool.py версии v2.6
Плагин arduino-esp8266fs-plugin использует один и тот же код для выполнения загрузки.
Выполняет upload.py —chip esp8266 —port /dev/ttyUSB0 —baud 115200 write_flash 0x300000 FSBrowser.spiffs.bin —end
Для проверки загрузк на sdk версии 2.5.2 я создал файлик FSBrowser.spiffs.bin в 10килобайт

Код:

user@my-pc:~/Arduino/hardware/esp8266com/esp8266/tools$ dd if=/dev/zero of=FSBrowser.spiffs.bin bs=1000 count=10
10+0 records in
10+0 records out
10000 bytes (10 kB, 9.8 KiB) copied, 0.00020148 s, 49.6 MB/s
user@my-pc:~/Arduino/hardware/esp8266com/esp8266/tools$ ls -l FSBrowser.spiffs.bin
-rw-rw-r-- 1 user user 10000 Nov 22 09:41 FSBrowser.spiffs.bin

И попробовал выполнить загрузку без подключенного модуля, просто не оказалось под рукой.

Код:

user@my-pc:~/Arduino/hardware/esp8266com/esp8266/tools$ ./upload.py --chip esp8266 --port /dev/ttyUSB0 --baud 115200 write_flash 0x300000 FSBrowser.spiffs.bin --end
esptool.py v2.6
Serial port /dev/ttyUSB0
Connecting........^C
Traceback (most recent call last):
  File "./upload.py", line 25, in <module>
    esptool.main(fakeargs)
  File "/home/user/Arduino/hardware/esp8266com/esp8266/tools/esptool/esptool.py", line 2653, in main
    esp.connect(args.before)
  File "/home/user/Arduino/hardware/esp8266com/esp8266/tools/esptool/esptool.py", line 463, in connect
    last_error = self._connect_attempt(mode=mode, esp32r0_delay=True)
  File "/home/user/Arduino/hardware/esp8266com/esp8266/tools/esptool/esptool.py", line 425, in _connect_attempt
    time.sleep(1.2)
KeyboardInterrupt

Загрузчик пытался честно загрузить модуль, который не подключен, я его прервал.

Пытаюсь повторить опыт на sdk версии 2.6.1, тот же FSBrowser.spiffs.bin той же командой

Код:

user@my-pc:~/Arduino/hardware/esp8266com/esp8266/tools$ ./upload.py --chip esp8266 --port /dev/ttyUSB0 --baud 115200 write_flash 0x300000 FSBrowser.spiffs.bin --end
usage: esptool write_flash [-h] [--erase-all]
                           [--flash_freq {keep,40m,26m,20m,80m}]
                           [--flash_mode {keep,qio,qout,dio,dout}]
                           [--flash_size FLASH_SIZE]
                           [--spi-connection SPI_CONNECTION] [--no-progress]
                           [--verify] [--encrypt]
                           [--ignore-flash-encryption-efuse-setting]
                           [--compress | --no-compress]
                           <address> <filename> [<address> <filename> ...]
esptool write_flash: error: argument <address> <filename>: Must be pairs of an address and the binary filename to write there

Загрузка даже не началась.

Скажите, для чего вы используете sdk версии 2.6.1? Ведь прежде у вас всё загружалось.

  • #23

На сдк 2.5.1 и 2.5.2 arduino-esp8266fs-plugin версии 0.4.0 (а свежее ещё небыло) работал, на 2.6.1 не работает и к чему эти рекомендации об устаревшем esptool-ck.exe, у @AllXXX в логах всяких .exe даже близко нет.
arduino-esp8266fs-plugin версия 0.4.0 дата выпуска 23 февраля 2019
ESP8266 core for Arduino версия 2.5.1 дата выпуска 11 мая 2019
Все рекомендации выполнены были с выходом 2.5.1 и загрузка работала.

  • #24

Адрес 0x300000 откуда взялся? Ардуина заливает файловую по адресу 0x100000.

  • #25

Видимо взялся из boards.txt
nodemcuv2.menu.eesz.4M1M=4MB (FS:1MB OTA:~1019KB)
nodemcuv2.menu.eesz.4M1M.build.flash_size=4M
nodemcuv2.menu.eesz.4M1M.build.flash_size_bytes=0x400000
nodemcuv2.menu.eesz.4M1M.build.flash_ld=eagle.flash.4m1m.ld
nodemcuv2.menu.eesz.4M1M.build.spiffs_pagesize=256
nodemcuv2.menu.eesz.4M1M.upload.maximum_size=1044464
nodemcuv2.menu.eesz.4M1M.build.rfcal_addr=0x3FC000
nodemcuv2.menu.eesz.4M1M.build.spiffs_start=0x300000
nodemcuv2.menu.eesz.4M1M.build.spiffs_end=0x3FA000
nodemcuv2.menu.eesz.4M1M.build.spiffs_blocksize=8192

  • #26

Добрый день @AllXXX @Алексей., я по-моему нашел решение, но не могу его на данный момент протестировать.
В пул-реквесте здесь: Make upload.py compatible with existing FS upload by earlephilhower · Pull Request #6788 · esp8266/Arduino были изменены параметры загрузки данных по SPIFFS так, чтобы все вновь работало. [off](я до конца не понял, возможно буду говорить чушь)[/off]

При рассмотрении пул-реквестов, владельцы и модераторы репозитория не заметили багу. Все одобренные пул-реквесты они добавили в обновление 2.6.0, позже, был еще фикс 2.6.1, в минорной версии они, как я понял, переписали uploader скетчей и данных для Arduino IDE под Python 3 (в связи с тем, что он с 01.01.2020 не будет поддерживаться).
И допустили ошибку, где перед аргументом «filename».bin не ставился дефолтный адрес загрузки 0x0.

Судя по пул-реквесту выше, они добавили эти изменения в будущее обновление 2.6.2, которое будет около 30 ноября.

На самом деле это, возможно, несовместимость с текущей версией arduino-esp8266fs-plugin.
Судя по этому обсуждению: Pull (#6765) breaks arduino-esp8266fs-plugin functionality · Issue #6777 · esp8266/Arduino; можно удалить «—end» в параметрах загрузчика (upload.py), либо пересобрать arduino-esp8266fs-plugin на Java.

Ваше и мое решение: применить изменения в 3 коммитах, или 2 измененных файлах в этом пул-реквесте Make upload.py compatible with existing FS upload by earlephilhower · Pull Request #6788 · esp8266/Arduino, пересобрать плагин на Java, или же удалить «—end» в upload.py и будет счастье :)

  • #27

пересобрать плагин на Java — не знаю как
или же удалить «—end» в upload.py нет в нем такого:

Код:

#!/usr/bin/env python3

# Wrapper for Arduino core / others that can call esptool.py possibly multiple times
# Adds pyserial to sys.path automatically based on the path of the current file

# First parameter is pyserial path, second is esptool path, then a series of command arguments separated with --end
# i.e. upload.py tools/pyserial tools/esptool erase_flash --end write_flash file 0x0 --end

import sys
import os
import tempfile

sys.argv.pop(0) # Remove executable name
toolspath = os.path.dirname(os.path.realpath(__file__)).replace('\', '/') # CWD in UNIX format
try:
    sys.path.insert(0, toolspath + "/pyserial") # Add pyserial dir to search path
    sys.path.insert(0, toolspath + "/esptool") # Add esptool dir to search path
    import esptool # If this fails, we can't continue and will bomb below
except:
    sys.stderr.write("pyserial or esptool directories not found next to this upload.py tool.n")
    sys.exit(1)

cmdline = []
write_option = ''
erase_addr = ''
erase_len = ''

while len(sys.argv):
    thisarg = sys.argv.pop(0)

    # We silently replace the 921kbaud setting with 460k to enable backward
    # compatibility with the old esptool-ck.exe.  Esptool.py doesn't seem
    # work reliably at 921k, but is still significantly faster at 460kbaud.
    if thisarg == "921600":
        thisarg = "460800"

    # 'erase_flash' command is translated to the write_flash --erase-all option
    # https://github.com/esp8266/Arduino/issues/6755#issuecomment-553208688
    if thisarg == "erase_flash":
        write_option = '--erase-all'
        thisarg = ''

    if thisarg == 'erase_region':
        erase_addr = sys.argv.pop(0)
        erase_len = sys.argv.pop(0)
        thisarg = ''

    if os.path.isfile(thisarg):
        binary = thisarg
        thisarg = ''

    if len(thisarg):
        cmdline = cmdline + [thisarg]

cmdline = cmdline + ['write_flash']
if len(write_option):
    cmdline = cmdline + [write_option]
cmdline = cmdline + ['0x0', binary]

erase_file = ''
if len(erase_addr):
    # generate temporary empty (0xff) file
    eraser = tempfile.mkstemp()
    erase_file = eraser[1]
    os.write(eraser[0], bytearray([255] * int(erase_len, 0)))
    os.close(eraser[0])
    cmdline = cmdline + [ erase_addr, erase_file ]

esptool.main(cmdline)

if len(erase_file):
    os.remove(erase_file)

буду ждать

  • #28

Я отказался от загрузки данных в spiffs через плагин, точнее, отказался от загрузки в spiffs используя какие-либо инструменты, позволяющие грузить в spiffs не из кода, в spiffs если необходимо держу только конфигурационные параметры.
Статические данные, такие как html страницы, стили скрипты, держу в коде в массивах байтов с атрибутом PROGMEM.
В исходниках они (статические данные) как прежде в директории data, а при сборке «налету» преобразую их в си-шные исходники.
Для платформы настраиваю хук для скетч-пребилд например:

Код:

recipe.hooks.sketch.prebuild.0.pattern = {runtime.platform.path}/prebuild.local {build.source.path} {build.path} {build.project_name}

runtime.platform.path — это путь до директории в которой живет платформа
prebuild.local — это скрипт, который я создал для запуска других скриптов в директориях со скетчами, которые могут и отсутствовать если prebuild не требуется

Bash:

#!/bin/bash
# проверяем наличие файла prebuild в исходной директории со скетчем
if [ -e "$1/prebuild" ]
then
  # переходим в исходную директорию со скетчем
  cd $1
  # выполняем prebuild передавая путь ко временной директории созданной ардуиной для билда и название проекта
  ./prebuild $2 $3
fi

build.source.path — это путь до директории где живет скетч
build.path — это путь до временной директории куда ардуина-иде скопировала скетч перед сборкой
build.project_name — это название проекта

  • #29

@AllXXX
Вчера подготовил файлы для тестирования на компьютере друга, сегодня залил, все работает вновь.

Фикс сработает, если вы используете библиотеку ESP8266 (менеджер плат) версии 2.6.1

Прикладываю 2 измененных файла из этого пул-реквеста: Make upload.py compatible with existing FS upload by earlephilhower · Pull Request #6788 · esp8266/Arduino

  1. Заменить файл «C:Users<Имя пользователя>AppDataLocalArduino15packagesesp8266hardwareesp82662.6.1platform.txt«
  2. Заменить файл «C:Users<Имя пользователя>AppDataLocalArduino15packagesesp8266hardwareesp82662.6.1toolsupload.py«

Было изменено:

upload_2019-11-25_19-38-54.png

  • 3.9 KB
    Просмотры: 59

  • #30

@Алексей.
Я просто думал, что это единственный вариант хранить статические данные, для того же веб-сервера (просто не особо знаком с разработкой под девайсы, да и вообще с C/C++ знаком только на уровне лабораторных из ИТМО)

А есть какие-то минусы от записи непосредственно во flash память, в отличие от использования для этого файловой системы SPIFFS?
Судя по определению PROGMEM, это чистая flash-память, а SPIFFS — попытка в файловую систему с дикими ограничениями, в которой также используется flash-память. Следовательно, ваш вариант будет даже лучше и быстрее для работы с памятью, или доступа к статическим данным.
[off]Кстати, в 2.6.1 они пофиксили багу с расширениями index-файла страницы, ибо по запросу к корню ‘/’ искался по-умолчанию .htm файл, и .html таким образом пролетал мимо[/off]

  • #31

@AllXXX
Вчера подготовил файлы для тестирования на компьютере друга, сегодня залил, все работает вновь.

Фикс сработает, если вы используете библиотеку ESP8266 (менеджер плат) версии 2.6.1

Прикладываю 2 измененных файла из этого пул-реквеста: Make upload.py compatible with existing FS upload by earlephilhower · Pull Request #6788 · esp8266/Arduino

  1. Заменить файл «C:Users<Имя пользователя>AppDataLocalArduino15packagesesp8266hardwareesp82662.6.1platform.txt«
  2. Заменить файл «C:Users<Имя пользователя>AppDataLocalArduino15packagesesp8266hardwareesp82662.6.1toolsupload.py«

Было изменено:

всё работает!!!

  • #32

Судя по определению PROGMEM, это чистая flash-память, а SPIFFS — попытка в файловую систему с дикими ограничениями,

Модификатором переменной PROGMEM говорим компилятору, не копировать эту переменную в оперативную память, оставлять её во флеше.
В реализации ESP8266WebServer есть возможность выполнять отправку контента как из переменных в оперативной памяти

Код:

sendContent(const String& content)
sendContent(const char *content)

Так и непосредственно из флеша

Код:

sendContent_P(PGM_P content)

Что касается SPIFFS — это раздел на флеше, в котором построена файловая система. Минус — скорость доступа.
Если данные не предполагается модифицировать совсем, то смысла держать их отдельно от кода нет.
Если данные иногда нужно менять, например для веб-интерфейса меняете внешний вид, а код оставляете прежний, то можно данные в файлах держать на SPIFFS.
Ещё один минус, на мой взгляд.
Код периодически приходится обновлять, исправление ошибок, добавление нового функционала и т.п.
Если обновление выполняете по воздуху и кроме обновления кода требуется выполнить обновления данных, то обновление выполняется в два этапа, код и spiffs.

  • #33

Swaggaboy6537: Прикладываю 2 измененных файла из этого пул-реквеста….

Мне помогло. Спасибо.

  • #34

Здраствуйте! Не удается подключится к ФС NodeMcu через браузер — вечная загрузка… Прошивается всё без ошибок.
Arduino 1.8.13
ESP8266 Boards 2.6.1
Плагин esp8266fs 0.5.0
OS:Linux

  • #35

Если залить скетч: «FSBrowser», в браузере загружается страничка с текстом «FS INIT ERROR»

  • #36

Если залить скетч: «FSBrowser», в браузере загружается страничка с текстом «FS INIT ERROR»

Раскоментировал строку #define USE_SPIFFS и всё заработало.

Page 1 of 1

Forum

Welcome to the Tweaking4All community forums!
When participating, please keep the Forum Rules in mind!

Topics for particular software or systems: Start your topic link with the name of the application or system.
For example “MacOS X – Your question“, or “MS Word – Your Tip or Trick“.

Please note that switching to another language when reading a post will not bring you to the same post, in Dutch, as there is no translation for that post!


[Solved] macOS — Aruino IDE — How to fix «pyserial or esptool directories not found next to this upload.py tool» error (ESP8266)

2
Posts

2
Users

1
Likes

6,501
Views

(@hans)

Famed Member Admin

Joined: 10 years ago

Posts: 2363

Topic starter
March 2, 2021 6:43 AM  

When switching to Big Sur, somehow the ESP8266 tools for the Arduino IDE broke … and one cannot upload compiled sketches any more.

An example of this error:

pyserial or esptool directories not found next to this upload.py tool.
An error occurred while uploading the sketch

This affects at least ESP8266 Core version 2.7.4 and 2.7.2 (I’m running Arduino IDE version: 1.8.13 right now).

The fix:

  1. Open the file
    ~/Library/Arduino15/packages/esp8266/hardware/esp8266/2.7.4/tools/pyserial/serial/tools/list_ports_osx.py
  2. Comment out lines 29 and 30 and add these lines:
       iokit = ctypes.cdll.LoadLibrary('/System/Library/Frameworks/IOKit.framework/IOKit')
       cf = ctypes.cdll.LoadLibrary('/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation')

The code should look something like this, save it and try again … this fixed it on my Mac:

from serial.tools import list_ports_common

#iokit = ctypes.cdll.LoadLibrary(ctypes.util.find_library('IOKit'))
#cf = ctypes.cdll.LoadLibrary(ctypes.util.find_library('CoreFoundation'))
iokit = ctypes.cdll.LoadLibrary('/System/Library/Frameworks/IOKit.framework/IOKit')
cf = ctypes.cdll.LoadLibrary('/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation')

kIOMasterPortDefault = ctypes.c_void_p.in_dll(iokit, "kIOMasterPortDefault")
kCFAllocatorDefault = ctypes.c_void_p.in_dll(cf, "kCFAllocatorDefault")

Joined: 53 years ago

Posts: 0

May 11, 2021 1:19 AM  

Very useful,

It worked for me (iMAC BIG SUR).

thanks for sharing

Понравилась статья? Поделить с друзьями:
  • Error in closing in the unzipfile
  • Error in class librarylwjglopenal
  • Error in class codecjorbis
  • Error in child compilations use stats children true resp stats children for more details
  • Error in chartodate x текстовая строка не относится к стандартному однозначному формату