原文出處:https://www.phodal.com/blog/bare-minimum-iot-system-mcu-commucation/
在我們完成了前面的幾部分之后,我們也需要把這最后一部分解決,這里更多的是硬件,Arduino的存在可以讓硬件更簡(jiǎn)單。
Arduino 是一款便捷靈活、方便上手的開(kāi)源電子原型平臺(tái),包含硬件(各種型號(hào)的arduino板)和軟件(arduino IDE)。它適用于藝術(shù)家、設(shè)計(jì)師、愛(ài)好者和對(duì)于“互動(dòng)”有興趣的朋友們。
那么讓我們先來(lái)看看我們寫(xiě)的代碼。
void setup() {
Serial.begin(9600);
pinMode(13,OUTPUT);
}
int serialData;
void loop() {
String inString = "";
while (Serial.available()> 0)
{
int inChar = Serial.read();
if (isDigit(inChar)) {
inString += (char)inChar;
}
serialData=inString.toInt();
Serial.print(serialData);
}
if(serialData==1){
digitalWrite(13,HIGH);
}else{
digitalWrite(13,LOW);
}
}
這個(gè)代碼看上去似乎會(huì)有點(diǎn)復(fù)雜,但是讓我們看點(diǎn)基礎(chǔ)的,也就是由Arduino來(lái)控制一個(gè)LED的亮和滅。
int led = 13;
void setup() {
pinMode(led, OUTPUT);
}
void loop() {
digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
這個(gè)也就是來(lái)自于官方的示例程序,而我們要做的東西也和這個(gè)差不多,只是這個(gè)是自動(dòng)的,上面那個(gè)是由串口通信來(lái)實(shí)現(xiàn)的。
串行接口是一種可以將接受來(lái)自CPU的并行數(shù)據(jù)字符轉(zhuǎn)換為連續(xù)的串行數(shù)據(jù)流發(fā)送出去,同時(shí)可將接受的串行數(shù)據(jù)流轉(zhuǎn)換為并行的數(shù)據(jù)字符供給CPU的器件。一般完成這種功能的電路,我們稱為串行接口電路。
簡(jiǎn)單地來(lái)說(shuō),我們誻就是用這個(gè)來(lái)實(shí)現(xiàn)通信的,用之前的RaspberryPI 發(fā)送1和0給Arduino。那么我們?cè)贏rduino上就只是接受和執(zhí)行,這個(gè)由loop里面的if來(lái)執(zhí)行
如果你真心不喜歡51上的復(fù)雜的串口,那么我想Arduino又是解放雙手的東西了。
Serial.begin(9600);
這個(gè)就是串口初始化,速率為9600。
while (Serial.available()<0)
{
int inChar = Serial.read();
if (isDigit(inChar)) {
inString += (char)inChar;
}
serialData=inString.toInt();
用于讀取的就是這么一行
int inChar=Serial.read()
而下面的部分則是剛我們接收到的數(shù)據(jù)轉(zhuǎn)換為1,由于接到的為char類型,那么我們需要轉(zhuǎn)為轉(zhuǎn)為Int進(jìn)行判斷。
只是為了寫(xiě)給需要的同學(xué)用的,也可以直接在上面用if(serialData=='1'),上面寫(xiě)可以讓后期擴(kuò)展的時(shí)候方便一點(diǎn)。
更多建議: