我有一个微控制器,当一个事件发生时,我希望它发送一封电子邮件。我知道如何在Java中使用电子邮件,但是如何将Java代码放在微控制器的C代码中呢?
#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
DDRB |= 1 << PINB0; // = 0b00000001
DDRB &= ~(1 << PINB1);
PORTB |= 1 << PINB1;
DDRB |= 1 << PINB2;
while(1)
{
PORTB ^= 1 << PINB0;
if(bit_is_clear(PINB, 1)){
PORTB &= ~(1 << PINB2);
_delay_ms(100); //SLOW
}
else{
_delay_ms(10); //FAST
/////I want the Java code in here/////
PORTB ^= 1 << PINB2;
}
}
}
修改
我正在使用Atmel Atmega8A微控制器。我正在制作一个简单的报警系统,如果B1针的电线断开,我想收到一封电子邮件或短信通知。
而且我只是一个高中生的新手,所以请不要过分夸大我的脑袋......
哦,如果有人可以在C中为我做多线程,那会很好。我来自Java背景,因为这是他们在高中教的。
答案 0 :(得分:6)
你的“问题”是将Java嵌入到你的AVR ......但你真正想要的是发送电子邮件。有一些实现运行Java字节码(或者至少我认为是这样),但我相信 none 这些将能够发送电子邮件。
您需要了解AVR的功能非常有限。要发送电子邮件,您的设置将需要使用TCP / IP连接到Internet 。使用ATmega8A本身无法实现的复杂功能。 可能可以找到可以通过UART进行通信以便发送电子邮件的硬件,或者您只需将其挂接到PC并运行应用程序以收听COM端口并发送电子邮件,或者......无论如何你需要额外的硬件。
您可能希望查看其他微控制器。我相信有一些网络支持,但它们可能会非常昂贵。或者,您可以改为使用Raspberry Pi。
答案 1 :(得分:1)
Java和C 非常,非常不同的语言。
您需要为支持Java的微控制器找到一个编译器。
但是,如果你的控制器可以通过GCC编译C,那么使用GCJ可能会对目标平台上的某些内存限制起作用。您需要生成具有正确架构的目标文件,并使用与微控制器兼容的gcc链接它。
不值得花时间 。我建议用C语言实现它。
此外,打开文件和套接字可能不会发生,因为微控制器通常不提供超出硬件访问某些方面的任何内核例程。 libc
也可能缺席或极少。
您可能也没有网络硬件。如果您能告诉我们哪个微控制器,我们可以提供帮助。
答案 2 :(得分:1)
Alvin Wong已经提出了一个更直接的问题答案,但我觉得你的问题是如此失焦,以至于帮助你重新聚焦它可能会很好。
当您从Java程序发送邮件时,您应该开始了解实际发生的事情,然后了解微控制器实际可以完成哪些部分,以及如何实现。
那么,当您运行发送邮件的Java程序时会发生什么?
(1)部分由Java平台的所有层调解。 (请记住:Java不仅仅是一种语言)
(2)是Java平台下的一个层(或几个),包括所有的操作系统(Windows,Linux,Mac OS X,等等)。
(3)是由您的硬件组成的一个层,其中包括其他子层,例如网卡中的固件,这些软件可能会管理以太网/ Wifi协议的详细信息。
(4)层在某些通信通道(以太网,WiFi,无论如何)中都可以打开和关闭位和字节。
现在,您的微控制器可以完成哪些部分? 微控制器位于(3)的下半部分。在您的情况下,Atmega甚至没有任何网络硬件支持,所以......我不知道您打算如何连接到网络。无论如何,即使你拥有它,你仍然非常接近(4),宁愿疯狂地尝试去(1)。 (1)对大象说,(4)可以由蚂蚁完成,微控制器大小与瓢虫大小相同,指的是Atmel的吉祥物:P。
所以:停止像大象一样思考。因为它是你必须努力达到你的目标,但如果你采取大象的方式,你可能会做大量不必要的工作 - 如果它可以完成,我怀疑。
(如果我不得不采取大象的方式,即在AVR中使用Java,我将首先考虑GCJ或LLVM选项。我知道已经做了一些工作来将极简主义JVM移植到8位微控制器上十年前,但不知道这是如何演变的)
答案 3 :(得分:1)
像其他人说的那样,以这种方式发送电子邮件实际上远非你的微观(我假设你主要想发送邮件,而不是在那里运行Java VM)。要获取邮件,您需要使用TCP / IP连接到Internet,然后使用SMTP协议,您可以实现此目的。
有问题的部分是连接到互联网。为此,您需要将设备置于“合适的线路”上,通常是以太网,但也可能存在基于无线电的解决方案。然后,您必须实现在该线路上进行通信所需的一切(整个网络堆栈直到TCP / IP)。这无法合理地完成。一种方法是使用具有一些内置以太网连接的微型计算机,例如lwip或Contiki,根据您的偏好来实现魔术。另一种方法是使用额外的硬件为你做这件事,例如this Moxa product,但你可能无法在此实现SMTP。
然后,您将“仅”需要实施合适的SMTP (Simple Mail Transfer Protocol)图层来正确发送您的邮件(我上面提到的一个或另一个解决方案可能已经为您提供此服务)。
答案 4 :(得分:0)
您的微控制器需要支持JDK或Java ME(可能是Sun SPOT)。 http://www.inonit.com/cygwin/jni/invocationApi/c.html有一个使用JNI启动JVM并调用您的类的示例。
答案 5 :(得分:0)
微控制器通常是在C环境中开发的,因为在微控制器中硬件功率方面的资源有限。使用C是因为它允许最大的灵活性并允许微调,因为在微控制器环境中实时计算机是非常必要的。这并不是说,微控制器世界中使用了java。虽然非常复杂,android运行在一些java上,在最低端可能使用ARM处理器(由你来决定你是否真的想要称之为微控制器)。总而言之,是的,我建议你学习C.如果你真的想要用java方式,我个人没有遇到很多允许你在AVR微控制器上使用java的资源。这可能是可能的,但预计性能会受到打击。
如果您没有微控制器方面的经验,我建议您研究一下Arduino(arduino.cc)。
祝你好运!