Как получить версию платы Arduino удаленно

esp8266webserver

У меня есть несколько плат Arduino WeMos D1, причем несколько версий были куплены с разницей в несколько месяцев. Одна из этих плат работает, но мне нужно ее обновить, и я не уверен, что это R1 или R2 (распиновки разные). У меня нет физического доступа к нему (он находится более чем в 200 милях отсюда, в районе, который заблокирован), но я могу подключиться через другое устройство по Wi-Fi.

Он включает в себя следующее:

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>

#include <WiFiUdp.h>
#include <ArduinoOTA.h>

Таким образом, я даже могу перейти на веб-сервер для выполнения команд. Как я могу добавить к коду (или даже заменить его) значение, которое сообщит мне, какой версии является плата? В соответствии с этим вы можете сделать это с помощью AT-команды, но я не уверен, как передать AT-команду из интерфейса веб-сервера (или любым другим способом).

ПРАВКА: Наверное, я перепутал этот вопрос с моей формулировкой. Я могу подключиться к плате и загрузить новый скетч (используя OTA). Мой вопрос заключается в том, могу ли я поместить что-то в новый скетч, чтобы определить детали платы и загрузить его. Как только я это получу, то смогу сделать тот самый скетч, который мне нужен.

, 👍2

Обсуждение

Если вы загружаете свой собственный скетч, он заменяет прошивку AT. У вас есть оригинальный код, который вы сожгли? Это будет указывать (на основе pin defs), какая версия--задним числом, это *всегда* хорошая идея, чтобы отслеживать, какое программное обеспечение идет на какую плату, например, по MAC-адресу или sthng., @Dave Newton

команда AT предназначена для версии микропрограммы AT, а не для идентификатора платы. программное обеспечение, работающее на esp8266, не должно знать пиноут платы. io 5 по-прежнему io 5, независимо от того, где он находится в заголовках платы. поэтому, если у вас нет чего-то особенного в вашем скетче, что говорит вам о версии набора платы при компиляции, нет никакого способа узнать, является ли это D1 (R1) или D1 R2, @Juraj

@Juraj В двух версиях используются разные модули ESP8266 - 12B/E vs 12F. Возможно, есть способ (в программном обеспечении) выяснить это., @Majenko

вы можете заменить скетч новым простым, который сравнивает имена конфигураций плат с числовым литералом, например: "if(D4==2) {...}". Убедитесь, что у вас есть OTA на тестовом скетче. Затем перекрасьте плату с текущим скетчем. Вот почему я перешел на интерпретируемый язык поверх arduino c: вы можете увидеть код из SPIFFS в виде обычного текста, отредактировать его из Интернета и снова запустить, причем все это без флешинга., @dandavis

@dandavis Можете уточнить? На каком языке? Ссылки?, @Chiwda

@Majenko это звучит многообещающе. Может быть, это AT command или что-то подобное, с чем я связан? Но как мне его использовать?, @Chiwda

@Majenko и Chiwda, не с загруженным в данный момент скетчом. но я сомневаюсь в этом с какой-либо программой. это все тот же чип esp8266. вы можете получить серийный номер, но я не уверен, что это поможет вам., @Juraj

Мне не нужно делать это с уже загруженным скетчем! Я могу загрузить новый скетч (как я уже сказал в своем вопросе "...или даже заменить его..."), а затем, когда я определю правильную версию, поместить туда правильный скетч обратно., @Chiwda

Я думаю о том, что все, что вы могли бы сделать, это использовать саму плату ардуино, например, что-то связанное с каким-то контактом, который отличается от двух созданных вами версий. Или если код позволяет вам *читать* код, который находится на плате, вы можете перепроектировать его, чтобы выяснить, какие контакты определены как какие. Очень важно понимать, какой код где развернут. Самое простое решение-попросить кого-нибудь сфотографировать его и отправить вам., @Dave Newton

дэйв на правильном пути в том, чтобы снова прочитать заклятие. найдите "rip code off arduino", чтобы найти сообщение на форуме, которое может иметь отношение к делу. Как только он у вас есть, сравните его со сборками вашего кода, @Abel


1 ответ


1

Вы ничего не можете сделать с вашим загруженным в данный момент скетчем. Плата может делать только то, на что вы ее запрограммировали, и ничего больше.

  • Здесь нет команд "AT". Они существуют только в том случае если вы загружаете прошивку AT вместо своей собственной прошивки
  • Вы не можете волшебным образом заставить свой код делать то на что он небыл запрограммирован

Однако единственными реальными различиями между двумя платами является версия используемого модуля ESP8266: ESP-12E vs ESP-12F (и единственное различие между этими модулями-это расположение антенны печатной платы для достижения сертификации FCC) и добавление некоторых незаселенных последовательных и I2C-контактов.

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

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


1: Если только вы не можете вызвать некоторое переполнение буфера и ввести новый код в память для выполнения, но для этого вам нужно быть l33t h4x0r.


Добавление:

Похоже, у них есть две платы, названные одинаково, с разным расположением контактов (обе, к сожалению, очень глупо спроектированы, но вот вы где). Все, что я могу предложить, это скомпилировать для одного, установить его и посмотреть, работает ли он. Если это не так, то скомпилируйте для другого и посмотрите, работает ли это.

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

,

проблема в том, что на одном и том же выводе заголовка R1 имеет другой вывод ввода-вывода, чем R2., @Juraj

@Juraj Ну что ж, это глупо с их стороны, не так ли? TBH, распиновка *обеих* плат просто глупа, так как "контактов" гораздо больше, чем на самом деле у ESP8266, поэтому распиновка в значительной степени бессмысленна., @Majenko