如何从C#应用程序编译并上传到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程序并将其上传到arduino板上

基本上,我构建了一个小型C#应用程序,它根据窗口中选择的一些参数生成C代码。现在,您必须将代码复制并粘贴到ardunio接口中,以便编译和上载程序

我想自动完成这项任务,直接将C代码générated发送到arduino板中,而不使用arduino程序或其他任何东西。只有我的窗口界面。可能吗

节目图片:

您不上传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();