Error 13 internal library install failed library not valid

Describe the request Add support for installing libraries from folders via "Add .ZIP Library". 🙂 The IDE will ensure libraries in any format are installed correctly. Describe the current ...

Describe the request

Add support for installing libraries from folders via «Add .ZIP Library«.

🙂 The IDE will ensure libraries in any format are installed correctly.

Describe the current behavior

Three methods are available for installing libraries:

  • Library Manager
  • Sketch > Include Library > Add .ZIP Library…
  • manually

Although Library Manager is the best option for installation of release versions of the thousands of libraries that are available for installation via that method. The alternative installation methods are required in some cases:

  • Beta testing non-release development revisions of the library
  • Installing libraries not available from Library Manager

Libraries can only be installed from a ZIP file via «Add .ZIP Library» if the ZIP archive has the correct structure of the library located in the root folder. Attempts to install from a ZIP file that has a library in a subfolder results in an error:

Error: Request installZip failed with message: 13 INTERNAL: Library install failed: library not valid

Despite the «ZIP» in the name, the Arduino IDE 1.x «Add .ZIP Library» feature has an undocumented capability to install libraries from a folder in addition to installation from a ZIP file. Because the average Arduino user has great difficulty with manual installation, this is the best installation method in cases where the ZIP file does not have the correct structure.

🙁 The «Add .ZIP Library» feature of Arduino IDE 2.x does not allow installation from folders.

To reproduce

  1. Download the popular GRBL CNC firmware library from the following link:
    https://github.com/gnea/grbl/archive/refs/heads/master.zip

  2. Select Sketch > Include Library > Add .ZIP Library… from the Arduino IDE 2.x menus.

  3. Select the downloaded grbl-master.zip file in the «Select a zip file containing the library you’d like to add» dialog.

  4. Click the Open button.
    🤷 An error notification appears:

    Error: Request installZip failed with message: 13 INTERNAL: Library install failed: library not valid

    This is expected because the GRBL library is in the grbl subfolder of the repository; not in the root as would be required to produce a valid ZIP archive structure.

  5. Unzip the downloaded grbl-master.zip file.

  6. Select Sketch > Include Library > Add .ZIP Library… from the Arduino IDE 2.x menus.

  7. Select the grbl subfolder from the extracted folder in the right panel of the «Select a zip file containing the library you’d like to add» dialog.

  8. Click the Open button.

🙁 The grbl subfolder opens in the dialog instead of the expected behavior of installing the library from the folder. There is no reasonable way to install this library via the Arduino IDE.

Note that, aside from steps 2-4 above which were added to demonstrate that the library can’t be installed from the ZIP file, the steps above are the officially documented installation procedure:

https://github.com/gnea/grbl/wiki/Compiling-Grbl#via-the-arduino-ide-all-platforms-recommended-for-all-users

Arduino IDE version

2.0.1

Operating system

  • Windows
  • Linux

Operating system version

  • Windows 10
  • Ubuntu 20.04

Additional context

The same repository structure that makes the library impossible to install via «Add .ZIP Library» also makes it impossible to submit to Library Manager:

https://github.com/arduino/library-registry/blob/main/FAQ.md#what-are-the-requirements-for-a-library-to-be-added-to-library-manager


Another example of extremely popular libraries hosted in a repository that does not have the structure to produce a ZIP file usable for installation:

https://github.com/jrowberg/i2cdevlib/tree/master/Arduino

The library author is aware of the situation, but has not been able to manage the necessary restructuring (which requires splitting the repository into many separate repositories in this case): jrowberg/i2cdevlib#311


Originally reported at https://forum.arduino.cc/t/i-cant-select-the-grbl-file-to-add-as-a-library/1050885

Issue checklist

  • I searched for previous requests in the issue tracker
  • I verified the feature was still missing when using the latest nightly build
  • My request contains all necessary details

Thanks for the help, but I’m going to abandon this library!

I tried what you suggested and I got a bunch of errors while trying to compile it.

C:UsersdedokAppDataLocalTemparduino-sketch-FCF09CB5FA1B987A069EC70BF332FB3EsketchsrcMultiPress.cpp.o (symbol from plugin): In function `SimplePress::SimplePress(int, unsigned long, void (*)(int))':
(.text+0x0): multiple definition of `SimplePress::SimplePress(int, unsigned long, void (*)(int))'
C:UsersdedokAppDataLocalTemparduino-sketch-FCF09CB5FA1B987A069EC70BF332FB3EsketchMultiPress.cpp.o (symbol from plugin):(.text+0x0): first defined here
C:UsersdedokAppDataLocalTemparduino-sketch-FCF09CB5FA1B987A069EC70BF332FB3EsketchsrcMultiPress.cpp.o (symbol from plugin): In function `SimplePress::SimplePress(int, unsigned long, void (*)(int))':
(.text+0x0): multiple definition of `SimplePress::instanceCount'
C:UsersdedokAppDataLocalTemparduino-sketch-FCF09CB5FA1B987A069EC70BF332FB3EsketchMultiPress.cpp.o (symbol from plugin):(.text+0x0): first defined here
C:UsersdedokAppDataLocalTemparduino-sketch-FCF09CB5FA1B987A069EC70BF332FB3EsketchsrcMultiPress.cpp.o (symbol from plugin): In function `SimplePress::SimplePress(int, unsigned long, void (*)(int))':
(.text+0x0): multiple definition of `SimplePress::instances'
C:UsersdedokAppDataLocalTemparduino-sketch-FCF09CB5FA1B987A069EC70BF332FB3EsketchMultiPress.cpp.o (symbol from plugin):(.text+0x0): first defined here
C:UsersdedokAppDataLocalTemparduino-sketch-FCF09CB5FA1B987A069EC70BF332FB3EsketchsrcMultiPress.cpp.o (symbol from plugin): In function `SimplePress::SimplePress(int, unsigned long, void (*)(int))':
(.text+0x0): multiple definition of `SimplePress::SimplePress(int, unsigned long, void (*)(int))'
C:UsersdedokAppDataLocalTemparduino-sketch-FCF09CB5FA1B987A069EC70BF332FB3EsketchMultiPress.cpp.o (symbol from plugin):(.text+0x0): first defined here
C:UsersdedokAppDataLocalTemparduino-sketch-FCF09CB5FA1B987A069EC70BF332FB3EsketchsrcMultiPress.cpp.o (symbol from plugin): In function `SimplePress::SimplePress(int, unsigned long, void (*)(int))':
(.text+0x0): multiple definition of `SimplePress::SimplePress(int, unsigned long, void (*)())'
C:UsersdedokAppDataLocalTemparduino-sketch-FCF09CB5FA1B987A069EC70BF332FB3EsketchMultiPress.cpp.o (symbol from plugin):(.text+0x0): first defined here
C:UsersdedokAppDataLocalTemparduino-sketch-FCF09CB5FA1B987A069EC70BF332FB3EsketchsrcMultiPress.cpp.o (symbol from plugin): In function `SimplePress::SimplePress(int, unsigned long, void (*)(int))':
(.text+0x0): multiple definition of `SimplePress::SimplePress(int, unsigned long, void (*)())'
C:UsersdedokAppDataLocalTemparduino-sketch-FCF09CB5FA1B987A069EC70BF332FB3EsketchMultiPress.cpp.o (symbol from plugin):(.text+0x0): first defined here
C:UsersdedokAppDataLocalTemparduino-sketch-FCF09CB5FA1B987A069EC70BF332FB3EsketchsrcMultiPress.cpp.o (symbol from plugin): In function `SimplePress::SimplePress(int, unsigned long, void (*)(int))':
(.text+0x0): multiple definition of `SimplePress::begin()'
C:UsersdedokAppDataLocalTemparduino-sketch-FCF09CB5FA1B987A069EC70BF332FB3EsketchMultiPress.cpp.o (symbol from plugin):(.text+0x0): first defined here
C:UsersdedokAppDataLocalTemparduino-sketch-FCF09CB5FA1B987A069EC70BF332FB3EsketchsrcMultiPress.cpp.o (symbol from plugin): In function `SimplePress::SimplePress(int, unsigned long, void (*)(int))':
(.text+0x0): multiple definition of `SimplePress::beginAll()'
C:UsersdedokAppDataLocalTemparduino-sketch-FCF09CB5FA1B987A069EC70BF332FB3EsketchMultiPress.cpp.o (symbol from plugin):(.text+0x0): first defined here
C:UsersdedokAppDataLocalTemparduino-sketch-FCF09CB5FA1B987A069EC70BF332FB3EsketchsrcMultiPress.cpp.o (symbol from plugin): In function `SimplePress::SimplePress(int, unsigned long, void (*)(int))':
(.text+0x0): multiple definition of `SimplePress::pressed()'
C:UsersdedokAppDataLocalTemparduino-sketch-FCF09CB5FA1B987A069EC70BF332FB3EsketchMultiPress.cpp.o (symbol from plugin):(.text+0x0): first defined here
C:UsersdedokAppDataLocalTemparduino-sketch-FCF09CB5FA1B987A069EC70BF332FB3EsketchsrcMultiPress.cpp.o (symbol from plugin): In function `SimplePress::SimplePress(int, unsigned long, void (*)(int))':
(.text+0x0): multiple definition of `SimplePress::update()'
C:UsersdedokAppDataLocalTemparduino-sketch-FCF09CB5FA1B987A069EC70BF332FB3EsketchMultiPress.cpp.o (symbol from plugin):(.text+0x0): first defined here
C:UsersdedokAppDataLocalTemparduino-sketch-FCF09CB5FA1B987A069EC70BF332FB3EsketchsrcMultiPress.cpp.o (symbol from plugin): In function `SimplePress::SimplePress(int, unsigned long, void (*)(int))':
(.text+0x0): multiple definition of `SimplePress::setDebounce(unsigned char)'
C:UsersdedokAppDataLocalTemparduino-sketch-FCF09CB5FA1B987A069EC70BF332FB3EsketchMultiPress.cpp.o (symbol from plugin):(.text+0x0): first defined here
C:UsersdedokAppDataLocalTemparduino-sketch-FCF09CB5FA1B987A069EC70BF332FB3EsketchsrcMultiPress.cpp.o (symbol from plugin): In function `SimplePress::SimplePress(int, unsigned long, void (*)(int))':
(.text+0x0): multiple definition of `SimplePress::setDebounceAll(unsigned char)'
C:UsersdedokAppDataLocalTemparduino-sketch-FCF09CB5FA1B987A069EC70BF332FB3EsketchMultiPress.cpp.o (symbol from plugin):(.text+0x0): first defined here
C:UsersdedokAppDataLocalTemparduino-sketch-FCF09CB5FA1B987A069EC70BF332FB3EsketchsrcMultiPress.cpp.o (symbol from plugin): In function `SimplePress::SimplePress(int, unsigned long, void (*)(int))':
(.text+0x0): multiple definition of `SimplePress::getCount()'
C:UsersdedokAppDataLocalTemparduino-sketch-FCF09CB5FA1B987A069EC70BF332FB3EsketchMultiPress.cpp.o (symbol from plugin):(.text+0x0): first defined here
collect2.exe: error: ld returned 1 exit status

exit status 1

Compilation error: exit status 1

when I install this library at my setting with Sketch-> Include library -> add .ZIP Library
and I got the message that «
Error: Request installZip failed with message: 13 INTERNAL: Library install failed: library not valid
«
why I get this message?

@lbernstone Thanks. I revised ArduinoOTA .cpp to abort() in lieu of ESP.restart on successful update (line 347). I also changed the delay from 100 ms to 200 ms (line 346). So far so good.

FYI, I have been using ESP.restart() in v2, and it works properly.

and i want to implement websocket

but after parsing #include library i have error in linker

undefined reference to `esp_websocket_client_init’

but i can normally click on the library and go to it

@Cerantror it’s most likely disabled in menuconfig

i am working on m1 macbook

i cannot do command «make menuconfig»

i copied from kconfig from websocket example and pasted it in kconfig file in another example

(in smart way not just banging file from one example to another formatting is good and i included other config lines)

That should be the only CONFIG needed. I mean, it is self-contained. You could always just stick it in components and hammer it into your project.

Hasenradball

@hasenradball

@lbernstone I have many comppiler warnings with the ESP32 core.
Should I make some PR for this?

In 2.0.3 or 2.0.4? I know they missed a bunch of warnings in 2.0.3

@lbernstone now it is compiling but now i cannot connect to url (the same url works in example)

I (3449) get_started: Connecting to ws://ws-postman.eu-gb.mybluemix.net/ws/echo…
E (3452) esp-tls: couldn’t get hostname for :ws-postman.eu-gb.mybluemix.net: getaddrinfo() returns 202, addrinfo=0x0

Hasenradball

@hasenradball

@lbernstone I use the platformio/espressif32@^5.0.0 in PIO

@Cerantror you can use sdkconfig.defaults file in that case

And it works only with esp-idf

so i cannot use it in esp-mdf like anything else? On the website is that everything from esp-idf works in esp-mdf i want it because it has OTA update support.

mdf-idf is based on esp-idf, so yes, you can, but it won’t work with arduino

Ok so i landed in wrong topic

You’re ok. We are free speech advocates here

i just want to use websocket because our infrastructure use them on daily basis so it will be easy for our IT to implement I need to deeper investigate mlink via HTTP

Websocket client is enabled in arduino, just im not sure about websocket server

Does anyone, know how to measure the baud rate and latency of ESP32 using oscilloscope.

@lbernstone Any downsides to using abort vs ESP.restart?

You won’t get the correct reset reason

Thx. For abort vs restart after OTA update success (to start the newly uploaded code, the chat subject), that won’t matter.

rahmanshaber

@rahmanshaber:matrix.org

[m]

HI guys, i want to use an external crystal in esp32-s3 so device can keep time accurately while in deep sleep, But i could not able to find any example of arduino example/ code to switch to that external clock source. I will be making my own board, and space is limited so i won’t use a RTC chip .

i found this issue in github that changes code in core library to change the clock source but i want an easy way that doesn’t need any of that low level changes.
espressif/arduino-esp32#1225

Hasenradball

@hasenradball

if I want to make some preprocesdor direktives like #if esp32 or similar shouldcI write #if defined esp32 or # if espe32

Miraculix 200

@Miraculix200

«#ifdef ESP32» or «#if defined(ESP32)»

@rahmanshaber:matrix.org you won’t find any easy solution that doesn’t require ESP-IDF adjustments likely.

rahmanshaber

@rahmanshaber:matrix.org

[m]

@atanisoft: that’s seems right.

Hasenradball

@hasenradball

were are the symbols defined like esp8266 or esp32?

are this symbols comming from the boards.txt?

Hi all, i am trying to update my esp32s2 via usb drive. Reading the update.bin file from the usb drive works and beginning and writing to the esp ota api works, but it fails to validate the image.

this code is with many logs, why dont you post logs to show where it fail?

Ср янв 26, 2022 00:36:30

veso74, Вы будете смеяться но у меня появилось 4 новых папки в Документах за последние сутки и ярлык
Гитхаб десктоп. который требовал репозиторий. Ни одна из 12 подпапок в Ардуино ему не подошла. создал Новую типа Гитхаб в доках,
оно стало искать емэйл…вобще нахально. И ничего похожего на вашу красивую картинку…(

Еще создались 3 папки Студио — визуал, микрочип и атмел…)
Честно я запутался с непривычки. Но чувствую покопаться будет интересно если АВР дойдет до стадии программирования.

Добавлено after 34 minutes 17 seconds:
VNS, посмотрел Ваш emergency_start.hex .
первые 8 это адресация видимо как всегда. Потом 25с0
и 9 штук 1895 забавно. Что это такое?…В конце строки наверно контрольная сумма.
В начале число слов и адрес воде для зашивки. Вспоминается.

В вашем коде я бы инвертировал обратно РВ1, без оптопары будет обычный делитель так проще и дешевле.
Конечно оптопара выглядит красиво на схеме…
0,5 сек паузы было вполне нормально для снятия питания с платы управления но можно и больше ждать, нечего аварии вызывать…

5сек пожалуй многовато, может не пройти команда, я бы выбрал от 4.1 … до 5ти. Хотя в некоторых случаях срабатывание происходит после 2х сек, надо проверять, но надежнее 4с. Практика покажет когда оно всё заработает.
А вот после пуска контроль надо проводить через 4сек чтоб всё устаканилось, через 1сек ничего толкового ещё не появится на выходе. Надо ждать >4 сек.
то есть — 5…10сек. нормально.

интересно что за 0F93 1F93 после инициализации процессора? )

Добавлено after 6 minutes 14 seconds:
можно выделить одну ножку для оптопары а другую для логического входа от делителя на резисторах Тогда сработка по переходу 1 в 0 ….))) и опрашивать по очереди

Добавлено after 3 minutes 1 second:
и после всего цикла контроль восстановления работы когда на доп. входе РВ? =1

Вложения
papki25jan22.jpg
(97.59 KiB) Скачиваний: 51

Ср янв 26, 2022 00:54:35

… но у меня появилось 4 новых папки в Документах за последние сутки и ярлык
Гитхаб десктоп. который требовал репозиторий. Ни одна из 12 подпапок в Ардуино ему не подошла. создал Новую типа Гитхаб в доках,
оно стало искать емэйл…вобще нахально. И ничего похожего на вашу красивую картинку…

Сложная работа скорее всего :).

Попробуйте действия на картинках и на отмеченных шагах:
1. Скопируйте архив с Гитхаба.
2. Перейдите в папку Arduino и создайте собственная hardware, если ee нет.
3. Разархивируйте там пакет архива с папками и файлами, с основная папка MicroCore-master.
4. Переименуйте папку до MicroCore (удалить -master).

Это при закрытая программа Arduino IDE. Таких действий достаточно. При запуске меню должно появиться в Arduino IDE.

Вложения
1.jpg
(238.46 KiB) Скачиваний: 44
2.jpg
(96.11 KiB) Скачиваний: 44
3.jpg
(110.42 KiB) Скачиваний: 41

Ср янв 26, 2022 02:39:02

VNS, посмотрел Ваш emergency_start.hex .
первые 8 это адресация видимо как всегда.

Да Вы батенька профи как оказалось… :)) я лишь просто любитель и такими знаниями не владею… читать машинные коды не умею… :dont_know: уж извините, это без меня. :beer:

VitalV писал(а):В вашем коде я бы инвертировал обратно РВ1, без оптопары будет обычный делитель так проще и дешевле.

Ну раз желаете через делитель, то как говорится: хозяин – барин. Но имейте ввиду, что при таком подходе необходимо позаботится о защите вывода МК на случай неисправности делителя.
Так или иначе но по Вашей просьбе вывод РВ1 инвертировал… паузу импульса 5 сек (РВ4), уменьшил до 4 сек. Паузу контроля при восстановлении напряжения увеличил с 1 сек, до 7 сек.

Ср янв 26, 2022 09:08:55

VNS, посмотрел Ваш emergency_start.hex .
первые 8 это адресация видимо как всегда.

необходимо позаботится о защите вывода МК на случай неисправности делителя.

спасибо за труды!…осталось купить и зашить корпус…
по защите я посмотрел пдф на атини13 — там пара диодов должна ограничивать ток пробоя через последовательный резистор делителя входа. У меня 1М5 поставлен, но надо подумать — ток утечки входа до 8мкА допускается в пин. Может делитель по_низкоомней придется подобрать если реально такая большая утечка.
Изображение

Добавлено after 46 minutes 9 seconds:

Это при закрытая программа Arduino IDE. Таких действий достаточно. При запуске меню должно появиться в Arduino IDE.

Уважаемый veso74 а вот это Arduino IDE когда и откуда появляется? В микрокоре.зип вообще нет экзе- файлов только си и тп. md….
:shock:
у меня студии 7,0 стоят но не работают совсем, микрочипская и атмеловская( никакого макроассемблера хотя бы…бесполезные…

Посоветуйте пож. простенький Ардуино где лучше взять :)

Ср янв 26, 2022 09:33:34

Уважаемый veso74 а вот это Arduino IDE когда и откуда появляется? В микрокоре.зип вообще нет экзе- файлов только си и тп. …
Посоветуйте пож. простенький Ардуино где лучше взять :)

С оригинального сайта:
1. https://www.arduino.cc/en/software
2. DOWNLOAD OPTIONS: Windows Win 7 and newer
3. JUST DOWNLOAD
4. установка со всеми опциями, работающими по умолчанию

Готово. И начинаете обновлять IDE для ATtiny13A, от предыдущего сообщения.

Для китайской клон Arduino понадобятся и их драйвера чипа CH340. Примерно здесь:
http://www.wch.cn/download/CH341SER_EXE.html

Ср янв 26, 2022 10:01:46

Это хорошо, ежли у желающего комп с виндовс7 или 10кой.
Если старый с ХР то придется ограничиться 1.8.9 (в «portable» варианте + флэшка гигабайт на 8 минимум) и некоторыми «танцами с бубном» при содействии дружественного знакомого, имеющего комп с 7/10й.
8)

Ср янв 26, 2022 10:14:11

Большинство старых версий также там есть:
https://www.arduino.cc/en/software/OldSoftwareReleases

На работе у меня на старом компе с winXP стоит точно Arduino IDE v1.8.9. Работают нормально (без последних надстроек и устройств). А и пытаемся написать код, совместимый «вниз» :). Не то, чтобы это всегда происходит, но интересно.

Ср янв 26, 2022 11:55:56

Для комфортной работы как вновь установленной IDE, так и при установке расширенного перечня платформ(обновления версий ранее установленных) именно на компе с ХР придётся таки солидным «шаманизмом» заниматься.
Это связано с изменением чего-то в протоколах интернета.
Ежли упаси боже запустить менеджер платформ на компе с ХР при активном подключении к тырнету можно полностью угробить уже установленную 1.8.9
А использовать старый добрый комп с ХР таки привычно и удобно…
Воть потому и пришлось на этот случай перейти к «портале» варианту сразу на двух носителях — одна версия на диске компа с ХР, вторая установлена на флешке (тоже в самом начале под ХР).
Далее уже проще — тащим флешку на ПК с 7/10, там запускаемых и обновляем.
Затем флешка ставится на ПК с ХР и содержимое копируется в соответствующие каталоге на диске в ПК.
8)
Для более поздних операционок и версий IDE такой шаманизм уже не требуется.
:beer:

Ср янв 26, 2022 12:28:07

Так как неоднократно возникло несоответствия обновленными библиотеками (авторы иногда обновляют библиотеки, почему-то иногда они несовместимы со старыми), я оставил все в «ручном режиме» (снимаю галочку в настройках для обновления) (liquidCrystal_I2C, Si5351и др.). И стараюсь иметь проекты с локальными путями для вложенных внешние библиотек. Так контроль более полный. А расширенные комментарии, например. для версии IDE, libs и др. в файлах (.ino, .cpp) в прошлом, экономит время в настоящем :).

Ср янв 26, 2022 14:57:53

Тут уж зависит от навыков и предпочтений.
Кто и сам библиотеки напишет, а кому и готовенькими воспользоваться удобно.
Портаблу с шаманством делал не для библиотек, а более для возможности установки и оперативного обновления «сторонних платформ» (да и «стандартных» в разумных пределах).
К примеру та же 1.8.9 дополнена всеми вариантами платформ с АВРками включая тиньки13, 2313, меги8515/162 и другие варианты.
Насчёт самодельных и не только библиотек — обычно на стадии написания и отладки проекта вставляют файлы в папке основного проекта без дополнительных папок-оболочек — тогда их удобно из основного окна IDE редактировать/ просматривать. А уж потом можно и по паркам раскидать.
8)
Но мы тут от основной темы несколько удалились — подождем, чего топикстартер новенького выложит.
:beer:

Ср янв 26, 2022 15:20:51

поставил Ардуино 222МБ скачал, ввел код из начала темы с лупом и делэями, получил ошибку Аксесс денайед-

Installing Servo@1.1.8
Failed to install library: Arduino_BuiltIn:1.0.0.
Error: 13 INTERNAL: Library install failed: moving extracted archive to destination dir: rename C:UsersUserDocumentsArduinolibrariespackage-565094140Servo-1.1.8 C:UsersUserDocumentsArduinolibrariesServo: Access is denied.
Изображение

пс. кстати — скачал понипрог, загрузил эмерженси.hex что выше выложили, так пони только первую строку прочёл и то кажется до половины …(((
а дальше нули вроде или фф

Ср янв 26, 2022 18:46:31

VitalV, .hex VNS-а для ATtini13A при силуляция в Proteus работает именно так, как он описал — при L -> PB1, выводы PB2, PB3 поднимаются и опускаются во времени.

.hex нормально загружается в программе программирования (eXtreme Burner — AVR). Если необходимо, и на реальном микроконтроллере могу попробовать. Проблема вероятно где-то в Ваших настройках и программах.

А за Arduino IDE: пока лучше вернитесь к версии v1.8.19.
(На v2.0.0-rc3 даже с blink я запутался в «изменениях программы» :) ).

Последний раз редактировалось veso74 Ср янв 26, 2022 19:03:19, всего редактировалось 1 раз.

Ср янв 26, 2022 18:57:37

Если речь о моих прошивках, то они 100% отрабатывают тот алгоритм, который заказан… :) проверенно в железе на девборде… да там и код то всего несколько строчек, сложно было бы допустить ошибку… хотя я иногда будучи невнимательным оных допускаю, :))) потому стараюсь даже самый простой вариант проверить на девборде. Благо она имеется (и не одна) под рукой… так что с ними (прошивками) всё нормуль — рабочие. :beer:

Ср янв 26, 2022 20:29:54

Стабильной и локализованой для офф-лайн работы можно считать только ардуиноIDE 1.8.19.
Двойка требует значительно больших ресурсов от компьютера.
8)
Но если уж комп воспринимает 1.8.19 (с учетом предварительно установленных пакетов jawa ver8 update321)
то есть смысл использовать автоматическую установку платформ через менеджер плат.
Там для тиньки 13 есть два варианта от разных авторов:

Код:
https://mcudude.github.io/MicroCore/package_MCUdude_MicroCore_index.json

и

Код:
https://raw.githubusercontent.com/sleemanj/optiboot/master/dists/package_gogo_diy_attiny_index.json

:roll:

Ср янв 26, 2022 22:23:58

что то написал но стёрлось браузером само…

спасибо всем за введение в тему! нашел тут дизассемблер
https://www.radiokot.ru/forum/viewtopic.php?p=665596

и прокомментил
———-
AVR DISASSEMBLER LISTING
Address Opcode Instruction
———-
000000 C025 RJMP L1
000001 9518 RETI
000002 9518 RETI
000003 9518 RETI
000004 9518 RETI
000005 9518 RETI
000006 9518 RETI
000007 9518 RETI
000008 9518 RETI
000009 9518 RETI

00000A 930F L5: PUSH R16 //пауза delay(R16, R17)
00000B 931F PUSH R17
00000C E207 LDI R16,$27
00000D E011 LDI R17,$01
00000E 5001 L2: SUBI R16,$01
00000F 4010 SBCI R17,$00
000010 F7E9 BRNE L2
000011 0000 NOP
000012 0000 NOP
000013 911F POP R17
000014 910F POP R16
000015 930F L4: PUSH R16
000016 931F PUSH R17
000017 E208 LDI R16,$28
000018 E011 LDI R17,$01
000019 5001 L3: SUBI R16,$01
00001A 4010 SBCI R17,$00
00001B F7E9 BRNE L3
00001C 0000 NOP
00001D 0000 NOP
00001E 0000 NOP
00001F 911F POP R17
000020 910F POP R16
000021 5001 SUBI R16,$01
000022 4010 SBCI R17,$00
000023 F789 BRNE L4
000024 0000 NOP
000025 9508 RET

000026 E90F L1: LDI R16,$9F
000027 BF0D OUT SPL,R16
000028 E108 LDI R16,$18
000029 BB07 OUT DDRB,R16
00002A E005 LDI R16,$05
00002B BB08 OUT PORTB,R16
00002C E60F LDI R16,$6F
00002D E117 LDI R17,$17 //7
00002E DFDB RCALL L5

00002F EE07 L6: LDI R16,$E7 //1
000030 E013 LDI R17,$03
000031 DFD8 RCALL L5

000032 99B1 SBIC PINB,1 //это контролька входа
000033 CFFB RJMP L6

000034 9AC3 SBI PORTB,3 //3=1
000035 ED0B LDI R16,$DB //1,5 сек
000036 E015 LDI R17,$05
000037 DFD2 RCALL L5

000038 98C3 CBI PORTB,3 //3=0
000039 EE07 LDI R16,$E7 //1
00003A E013 LDI R17,$03
00003B DFCE RCALL L5

00003C 9AC4 SBI PORTB,4 //4=1
00003D EE07 LDI R16,$E7
00003E E013 LDI R17,$03
00003F DFCA RCALL L5

000040 98C4 CBI PORTB,4 //4=0
000041 EE07 LDI R16,$E7 //1
000042 E013 LDI R17,$03
000043 DFC6 RCALL L5

000044 9AC4 SBI PORTB,4 //4=1
000045 E90F LDI R16,$9F //5сек
000046 E01F LDI R17,$0F
000047 DFC2 RCALL L5

000048 98C4 CBI PORTB,4 //4=0
000049 E60F LDI R16,$6F //7с
00004A E117 LDI R17,$17
00004B DFBE RCALL L5

00004C CFE2 RJMP L6

хоть понятно где константы времени подбирать. оперативно.
А время надо Ардуино поизучать и Студио разные)

пс. хотел листинг приаттачить но чего то админом запрещено? хм могу переименовать но принцип запрета непонятен
:dont_know: :dont_know:

Чт янв 27, 2022 08:00:37

Теперь пора вспомнить и о следующем вопросе:
viewtopic.php?p=4167790#p4167790
который остался без ответа. :)
Так нужно ли организовывать конкретное число попыток запуска, или пусть долбит бесконечно при какой либо неисправности? :))

Чт янв 27, 2022 08:36:35

VNS, в начале не было указано, так что пусть перезапускает…
Если после испытаний будут предложения. то можно доработать программу, я полагаю.
Мой рабочий макет на рассыпухе работает «бесконечно» ) вот уже несколько дней…
конечно приходится вызывать перегрузки «ручным» способом, это как пожарный топор висит с ведром на красном щите…
на тот самый случай.
Как сделаю платушку и запрограммирую, отпишусь.

пс. по здравому размышления, если произошёл сбой в системе вследствие аварии или случайного сброса, то
например, минут 5 можно пытаться запускать раз в несколько минут,
если причины сбоя не устранены типа короткого замыкания, допустим нет людей для легкого ремонта,
или приедут через неделю, :shock:
можно перейти на режим пробного пуска через пол часа — час по одной минуте или несколько циклов.
Пока не хочется фантазировать особо… единственно можно обсудить быстродействие такого устройства и выбор внутренней частоты АВРа. :wink:

Чт янв 27, 2022 09:34:17

VNS, посмотрел Ваш emergency_start.hex .
первые 8 это адресация видимо как всегда. Потом 25с0

ihex не так кодируется. После двоеточия первые 1 байт (две цифры) это количество данных, потом 2 байта адрес, потом 1 байт флаг типа данных (данные это вообще или еще что-то), потом собственно данные и наконец LRC-контрольная сумма.

Код:
 размер начало код         данные       контрольная сумма
:   0A   0090   00 C4980FE617E1BEDFE2CF       CF

AVR DISASSEMBLER LISTING
Address Opcode Instruction

Если уж вы пытаетесь разобраться в формате ihex и ассемблерных кодах, надо ли возиться с Ардуиной? Может проще начать с начала — AVRStudio4, встроенный симулятор, ассемблер?

Чт янв 27, 2022 10:59:44

единственно можно обсудить быстродействие такого устройства и выбор внутренней частоты АВРа. :wink:

При таком алгоритме, частота тактирования вообще не важна. То есть ничего она особо не изменит. Предлагаю оставить заводскую установку (1,2 МГц). Меньше повода ошибиться с фьюзами и в следствии чего «потерять» МК. :)

ЗЫ. Сейчас набросаю дополнение о вышеизложенном… :write:

Добавлено after 43 minutes 29 seconds:
Алгоритм по временным интервалам практически тот же, но с добавлением количества попыток и световой индикацией.
Алгоритм:
При подаче питания выдерживается пауза (7 сек) перед опросом вывода РВ1. Если на выводе РВ1 лог 1, то зажигается зелёный светодиод (РВ2), и последующая проверка вывода РВ1 производится через каждую секунду.
Если на выводе РВ1 появился лог 0, то гаснет зелёный светодиод и через 500 мс производится алгоритм пуска. При этом красный светодиод начнёт мигать. После окончания алгоритма пуска производится пауза (7 сек.), после которой производится проверка вывода РВ1.
Если на выводе РВ1 лог 1, то через 1 секунду зажигается зелёный светодиод, и последующая проверка вывода РВ1 продолжает производится через каждую секунду.
Если после первой попытки алгоритма пуска на выводе РВ1 лог 0 то через 500 мс производится повторная попытка алгоритма пуска.
По окончании трёх попыток, красный светодиод начинает постоянно гореть, сигнализируя о завершении процедуры запуска. Далее МК ничего не контролирует, но включает таймер простоя (примерно 30 минут). По завершении отсчёта таймера проверяется вывод РВ1, если за время простоя никто не произвёл врукопашную запуск, то попытки запуска возобновляются. Если запуск во время простоя был кем-то произведён, то включается зелёный светодиод, сигнализируя о работе в дежурном режиме.
emergency_start_Vb.hex

Поправил алгоритм… добавил процедуру которую выпустил из виду (для корректной работы)… и организовал проверку вывода РВ1 в момент отсчёта паузы (30 мин), а не по окончании данного отсчёта как в предыдущей версии (которую удалил).

Чт янв 27, 2022 21:06:10

Проверил на железе, работает как описано.

Powered by phpBB © phpBB Group.

phpBB Mobile / SEO by Artodia.

Introduction: BH1750 Digital Light Sensor

BH1750FVI Is a Digital Light sensor , which is an digital Ambient Light Sensor IC for I2C bus interface. This IC is the most suitable to obtain the ambient light data for adjusting LCD and Keypad backlight power of Mobile phone. It is possible to detect wide range at High resolution.( 1 — 65535 lx ).

this sensor has some advantages such like :

1) Illuminance to Digital Converter
2) Wide range and High resolution. ( 1 — 65535 lx )
3) Low Current by power down function
4) 50Hz / 60Hz Light noise reject-function
5) I2C bus Interface ( f / s Mode Support )
6) No need any external parts
7) It is possible to select 2 type of I2C slave-address.
8) It is possible to detect min. 0.11 lx, max. 100000 lx by using this function.

DataSheet for this sensor will be found here 

it’s easy to use and connect , so Let’s started

We will need :

1) Arduino Board» Uno,Nano,mini .. «

2)BH1750 Breakout .

3)Solderless Jumper

4)CD4050 Hex Buffer IC , Or 510 Ohm resistor *3

5)BreadBoard .

Step 1: Definition of Luminous ,Lumen

illuminance is a measure of how much luminous flux is spread over a given area. One can think of luminous flux (measured in lumens) as a measure of the total «amount» of visible light present, and the illuminance as a measure of the intensity of illumination on a surface 

Lumen : The unit for the quantity of light flowing from a source in any one second (the luminous power, or luminous flux) is called the lumen.

In our sensor we will take a reading from it in Lux which is equal  to one lumen per square metre:

Lux = 1 Lm/m2 .

Step 2: Datasheet …..inside

The DataSheet  for BH1750 has a specification of :

Supply voltage : prefer to use 3.3 V to communicate with , Not 5V TTL Logic 

I2C Protocol is used to communicate with Microcontroller , with clock SCL Frequency 400KHz .

Measurement mode: this sensor has 3 Measurement mode :

1) H-resolution with Sensitivity 0.5 lux
2) H-Resolution with Sensitivity 1 lux.
3) L-Resolution with Sensitivity 4 lux.

the datasheet recommended  to use H-Resolution Mode due to kind of noise( including in 50Hz / 60Hz
noise ) is rejected. And H-Resolution Mode is 1 l x resolution so that it is suitable for darkness ( less than 10 lx )

the Instruction Set Architect table show all commend you will need to write a code .

Step 3: Connection

as I mentioned before , the BH1750FVI  breakout works with 3.3V , Not with 5V  so You can connect this breakout By using :

510 Ohm Resistor , the input voltage on arduino SDA,SCL Pin not greater 3.6V , tested on oscillscope

using CD4050 Hex Buffer 5-3.3 logic converter .

in Newest  Arduino Board «Like Arduino Uno R3» Has I/OREF Pin above reset Pin , his pin on the Arduino board provides the voltage reference with which the microcontroller operates. A properly configured shield can read the IOREF pin voltage and select the appropriate power source or enable voltage translators on the outputs for working with the 5V or 3.3V.  very nice you can use it .

about ADDR Pin , I prepare a Library » I will talk about in the next step » , You can select the address of your breakout , Even 0x23 , or 0X5C , this action depend on the ADDR Pin status , if connecting to Gnd , the address will be 0x23 , else if ADDR Connecting to Vcc The address will be 0X5C  .

Step 4: Arduino Code

I prepared a library for this sensor , You can download it from Here

First Many thanks for Claws , He created a library for BH1750 , You can check it Out .

I prepared a library for it , Tried to solve some issue such like :

1) multi device connecting , You can connect 2 devices of BH1750 WIth different addresses , Depend on ADDR Pin status .

 If ADDR = LOW , The address will be 0x23

If ADDR = HIGH, The address will be 0x5C

2)Power down mode , you can put your sensor in power save mode so it’s consume 0.01uA  .

You can downLoad the library from Github , Unzip the attachment and put it in Libraries folder in arduino Path , then restart the arduino IDE .

You can Open the sketch comes with this library .

First program : Read the Lux value via serial Port .

code :

/*
  This is a simple code to test BH1750FVI Light senosr
  communicate using I2C Protocol
  this library enable 2 slave device address
  Main address  0x23
  secondary address 0x5C
  connect this sensor as following :
  VCC >>> 3.3V
  SDA >>> A4
  SCL >>> A5
  addr >> A3
  Gnd >>>Gnd

  Written By : Mohannad Rawashdeh

*/

// First define the library :

#include <BH1750FVI.h> // Sensor Library
#include <Wire.h> // I2C Library

BH1750FVI LightSensor;

void setup() {   // put your setup code here, to run once:
   Serial.begin(9600);
  LightSensor.begin();
  /*
Set the address for this sensor
you can use 2 different address
Device_Address_H «0x5C»
Device_Address_L «0x23»
you must connect Addr pin to A3 .
*/
  LightSensor.SetAddress(Device_Address_H);//Address 0x5C
// To adjust the slave on other address , uncomment this line
// lightMeter.SetAddress(Device_Address_L); //Address 0x5C
//————————————————
  /*
   set the Working Mode for this sensor
   Select the following Mode:
    Continuous_H_resolution_Mode
    Continuous_H_resolution_Mode2
    Continuous_L_resolution_Mode
    OneTime_H_resolution_Mode
    OneTime_H_resolution_Mode2
    OneTime_L_resolution_Mode

    The data sheet recommanded To use Continuous_H_resolution_Mode
  */

  LightSensor.SetMode(Continuous_H_resolution_Mode);

  Serial.println(«Running…»);
}

void loop() {
  // put your main code here, to run repeatedly:
  uint16_t lux = LightSensor.GetLightIntensity();// Get Lux value
  Serial.print(«Light: «);
  Serial.print(lux);
  Serial.println(» lux»);
  delay(1000);
}

Step 5: LED , LCD 1602 and BH1750

On the library attachment You can find Led _BH1750 Code , connect a LED with resistor 100 ohm to pin D9 , The brightness will change inversely with intensity value .

code :

/*
  This is a simple code to test BH1750FVI Light senosr
  communicate using I2C Protocol
  this library enable 2 slave device address
  Main address  0x23
  secondary address 0x5C
  connect this sensor as following :
  VCC >>> 3.3V
  SDA >>> A4
  SCL >>> A5
  addr >> A3
  Gnd >>>Gnd

  Written By : Mohannad Rawashdeh

*/

// First define the library :
#include <BH1750FVI.h> // Sensor Library
#include <Wire.h> // I2C Library

uint16_t Light_Intensity=0;
// Call the function
#define LedPin 9 // led connecting to pin D9
BH1750FVI LightSensor;

int SensorValue =0;
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
//  call begin Function so turn the sensor On .
  LightSensor.begin();
/*
Set the address for this sensor
you can use 2 different address
Device_Address_H «0x5C»
Device_Address_L «0x23»
you must connect Addr pin to A3 .
*/
  LightSensor.SetAddress(Device_Address_H); //Address 0x5C
// To adjust the slave on other address , uncomment this line
// lightMeter.SetAddress(Device_Address_L); //Address 0x5C
//————————————————
   /*
   set the Working Mode for this sensor
   Select the following Mode:
    Continuous_H_resolution_Mode
    Continuous_H_resolution_Mode2
    Continuous_L_resolution_Mode
    OneTime_H_resolution_Mode
    OneTime_H_resolution_Mode2
    OneTime_L_resolution_Mode

    The data sheet recommanded To use Continuous_H_resolution_Mode
  */
  LightSensor.SetMode(Continuous_H_resolution_Mode);
  pinMode(9,OUTPUT) // Connect LED With 100ohm resistor
  // to pin D9

}

void loop() {
  // put your main code here, to run repeatedly:
  // call GetLightIntensity() Function , so the sensor read
  //the Intensity Value and send it
  Light_Intensity=LightSensor.GetLightIntensity();
  delay(50);

  SensorValue=map(Light_Intensity,0,2000,255,0);
  SensorValue=constrain(SensorValue,255,0);
  digitalWrite(LedPin,SensorValue);
  // ready to another reading .
}

On the library attachment You can find LCD _BH1750 Code , connect a LCD1602 AND BH1750 Together  

code :

/*
  This is a simple code to test BH1750FVI Light senosr
  communicate using I2C Protocol
  this library enable 2 slave device address
  Main address  0x23
  secondary address 0x5C
  connect this sensor as following :
  VCC >>> 3.3V
  SDA >>> A4
  SCL >>> A5
  addr >> A3
  Gnd >>>Gnd

  Written By : Mohannad Rawashdeh

*/

// First define the library :
#include <BH1750FVI.h> // Sensor Library
#include <Wire.h> // I2C Library
#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
uint16_t Light_Intensity=0;
// Call the function

BH1750FVI LightSensor;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  lcd.begin(16, 2);

//  call begin Function so turn the sensor On .
  LightSensor.begin();
  LightSensor.SetAddress(Device_Address_H); //Address 0x5C
  LightSensor.SetMode(Continuous_H_resolution_Mode);
  lcd.setCursor(0, 0);
  lcd.print(«BH1750 Sensor»);
  lcd.setCursor(1, 1);
  lcd.print(«Please wait…»);
  delay(3000);
  lcd.clear();

}

void loop() {
  // put your main code here, to run repeatedly:
   lcd.clear();
   lcd.setCursor(0, 0);
   lcd.print(» Intensity = «);
   lcd.setCursor(5, 1);
   Light_Intensity = LightSensor.GetLightIntensity();
   lcd.print(Light_Intensity);
   lcd.print(» Lux»);
   delay(2000);

}

This Video For it 

Step 6: BH1750FVI Library

the BH1750FVI Library is easy to use .

first , to include the library :

#include <BH1750FVI.h>

give a name for a library to call function through

BH1750FVI LightSensor ;

to begin the library , make sensor ready to use , call :

begin();

force sensor to power Down , call :

Sleep();

to wake up the sensor , call :

Reset();

toSet the address for this sensor ,you can use 2 different address , you must connect Addr pin to A3 .
Device_Address_H «0x5C»
Device_Address_L «0x23»

call :

SetAddress(Device_Address);

set the Working Mode for this sensor , call :

SetMode( Mode);

which mode would be :

    Continuous_H_resolution_Mode
    Continuous_H_resolution_Mode2
    Continuous_L_resolution_Mode
    OneTime_H_resolution_Mode
    OneTime_H_resolution_Mode2
    OneTime_L_resolution_Mode

and  finally to get Intensity value call function :

GetLightIntensity();

return value of intensity , 2 Byte .

 finally , you can use this sensor to build a simple solar Tracker system or light seeker robot «I will discuss about later «

hope give me a feedback for circuit and library , to make it better .

thank you

4 People Made This Project!

Recommendations

Понравилась статья? Поделить с друзьями:
  • Error 129 mapmem map size truncated to 128mb
  • Error 1286 42000 unknown storage engine federated
  • Error 1286 42000 at line 1 unknown storage engine archive
  • Error 1285 алайт моушен
  • Error 1285 alight motion