Получить уникальное значение идентификации контроллера Arduino Uno из настольного приложения C # - PullRequest
0 голосов
/ 29 декабря 2018

Я пытаюсь выяснить, что и как можно получить как уникальный идентификационный номер или любой другой вид идентификатора идентификатора от конкретного микроконтроллера Arduino Uno из настольного приложения C # с данными последовательного порта

В случаеUno, у меня открыт COM3:

myport.PortName = comPort;
myport.BaudRate = 9600;
myport.Open();

Но я не уверен, как читать такие данные, как ID чипа, например с EEPROM Get :

#include <EEPROM.h>
void setup() {
  float f = 0.00f; 
  int eeAddress = 0; 
  Serial.begin(9600);
  while (!Serial) { 
  }
  Serial.print("Read float from EEPROM: ");
  EEPROM.get(eeAddress, f);
  Serial.println(f, 3);    
  secondTest(); //Run the next test.
}
struct MyObject {
  float field1;
  byte field2;
  char name[10];
};
void secondTest() {
  int eeAddress = sizeof(float); 
  MyObject customVar; 
  EEPROM.get(eeAddress, customVar);
  Serial.println("Read custom object from EEPROM: ");
  Serial.println(customVar.field1);
  Serial.println(customVar.field2);
  Serial.println(customVar.name);
}
void loop() {}

и C #:

private void button1_Click(object sender, EventArgs e)
{
    textBox1.Text = myport.ReadExisting();
}

Я получил совершенно неверный результат:

Read float from EEPROM: ovf
Read custom object from EEPROM: 
ovf
95
_^^]]]\\\\fedc

Какая должна быть выходная переменная, чтобы получить уникальный идентификатор из конкретного микроконтроллера:

  Serial.println(customVar.field2);
  Serial.println(customVar.name);

1 Ответ

0 голосов
/ 30 декабря 2018

Atmega328P, используемый в официальном Arduino UNO, не имеет запрограммированного на заводе уникального идентификатора.Однако Atmega328P B имеет предварительно запрограммированный серийный номер длиной 10 байтов.

Atmega328PB кажется вполне совместимым с Atmega328P.Различия описаны в этом примечании к приложению: http://ww1.microchip.com/downloads/en/AppNotes/Atmel-42559-Differences-between-ATmega328P-and-ATmega328PB_ApplicationNote_AT15007.pdf

Серийный номер можно прочитать с помощью функции boot_signature_byte_get () из avr / boot.h: https://www.nongnu.org/avr-libc/user-manual/group__avr__boot.html#gaf375d2543ba38dc56697b4f4bc37a717

Существуют платы, доступные с чипом Atmega328PBпросто поищите в Google «Atmega328PB arduino».

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

...