如何从C#应用程序编译并上传到Arduino
有没有办法编译一个C程序并将其上传到arduino板上 基本上,我构建了一个小型C#应用程序,它根据窗口中选择的一些参数生成C代码。现在,您必须将代码复制并粘贴到ardunio接口中,以便编译和上载程序 我想自动完成这项任务,直接将C代码générated发送到arduino板中,而不使用arduino程序或其他任何东西。只有我的窗口界面。可能吗 节目图片:如何从C#应用程序编译并上传到Arduino,c#,upload,arduino,atmel,C#,Upload,Arduino,Atmel,有没有办法编译一个C程序并将其上传到arduino板上 基本上,我构建了一个小型C#应用程序,它根据窗口中选择的一些参数生成C代码。现在,您必须将代码复制并粘贴到ardunio接口中,以便编译和上载程序 我想自动完成这项任务,直接将C代码générated发送到arduino板中,而不使用arduino程序或其他任何东西。只有我的窗口界面。可能吗 节目图片: 您不上传C代码,但使用avr gcc将其编译为机器代码。 此外,ArduinoIDE还做了一些准备,从.ino文件生成.cpp文件(生成函
您不上传C代码,但使用avr gcc将其编译为机器代码。 此外,ArduinoIDE还做了一些准备,从.ino文件生成.cpp文件(生成函数原型,添加包含文件) 然后使用实用程序avrdude上传生成的.hex文件 编译和上载时查看扩展输出 总的来说这是可能的,但是你问的方式我怀疑你会成功。 在使用c#时,请在VisualStudio(搜索VisualMicro)中查找VisualStudio插件以编译并上载到Arduino。
也许这对您来说很有趣…正如datafiddler在他的回答中指出的那样,您需要首先调用
avr gcc
(以便编译您的程序)
作为第二步(上传过程)的替代方法,您可以使用本机C#库通过Arduino的引导加载程序将二进制十六进制文件上传到Arduino。这样,您就不必用代码装运/包装avrdude
免责声明:这是我个人编写的图书馆
引用nuget包ArduinoUploader
后,生成的代码如下所示:
var uploader = new ArduinoSketchUploader(
new ArduinoSketchUploaderOptions()
{
FileName = @"C:\MyHexFiles\UnoHexFile.ino.hex",
PortName = "COM3",
ArduinoModel = ArduinoModel.UnoR3
});
uploader.UploadSketch();
您可以将Arduino软件下载为非管理员安装文件夹,并将其用作C#程序的资源。然后,您可以在后台调用编译器,并将CMD属性设置为
cmd.StartInfo.WindowStyle=ProcessWindowStyle.Hidden;
cmd.StartInfo.CreateNoWindow=true代码>
然后对上传程序执行同样的操作
这样,所有操作都会在后台自动完成,而程序用户不会注意到。感谢您的回复。我观察有关视觉显微镜的信息。这对我来说似乎很难使用它!谢谢,您可以从IDE开始,然后将草图导入VS项目。在VS中,您可以编辑(更好的intellisense支持)、编译和上载。当然,这与您的问题/想法完全不同,但使用Arduino iDevisialMicro是一个仅需45天试用期的许可插件,这可能是一个解决方案,因此我必须找到一个解决方案来创建.ino.hex。我从未探索过C#的这一部分,但我认为这是我可以接受的方式。谢谢。您的库可以上传Esp32系列的十六进制代码吗?
Code used to compile and install arduino in c# :
DosyaYolu is a arduino .ino folder path
`myPath` is a file path where arduinon is installed.
string myPath = @"C:\Program Files (x86)\Arduino\arduino";
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = myPath;
p.StartInfo.Arguments = @"--upload " + DosyaYolu;
p.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.UseShellExecute = false;
p.Start();