繁体   English   中英

从 C# 桌面应用程序获取 Arduino Uno 控制器的唯一标识值

[英]Get unique identification value of Arduino Uno controller from C# desktop application

我试图弄清楚,什么以及如何从具有串行端口数据的 C# 桌面应用程序的特定 Arduino Uno 微控制器中获得唯一标识号或任何其他类型的等效 ID

在 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

从特定微控制器获取唯一 id 的输出变量必须是什么:

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

官方 Arduino UNO 中使用的 Atmega328P 没有任何工厂编程的唯一 ID。 但是,Atmega328P B确实有 10 字节长的预编程序列号。

Atmega328PB 似乎与 Atmega328P 非常兼容。 本应用笔记描述了不同之处: http : //ww1.microchip.com/downloads/en/AppNotes/Atmel-42559-Differences-between-ATmega328P-and-ATmega328PB_ApplicationNote_AT15007.pdf

您可以使用 avr/boot.h 中的 boot_signature_byte_get() 函数读取序列号: https ://www.nongnu.org/avr-libc/user-manual/group__avr__boot.html#gaf375d2543ba38dc56697b4f4bc37a717

有可用的 Atmega328PB 芯片板,只需在谷歌上搜索“Atmega328PB arduino”。

如果您无法更换芯片,则需要自己生成唯一 ID 并将其编程到您的芯片中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM