<p>如果要传输文本,最简单的方法是选择一些字符来分隔单个字符串,它可以是\n(换行符)、逗号或其他任何字符。在</p>
<pre><code>ser = serial.Serial ("COM4", 9600)
ser.write(b"some string\n")
ser.write(b"some other string\n")
</code></pre>
<p>在python中阅读文本如下所示:</p>
^{pr2}$
<p>在arduino上,您将阅读如下字符串(原始示例):</p>
<pre><code>char buf[64];
int bufIdx = 0;
while(Serial.peek() != '\n') { // Continue till the end of line
if(Serial.peek() != -1) { // If no char arrived in this loop, skip.
buf[bufIdx] = Serial.read();
bufIdx = (bufIdx + 1) % 64; // Wrap around, so it will not go crazy string too long
}
}
buf[bufIdx] = '\0'; // End of string char
</code></pre>
<p>或者,如果您不介意在Arduino上使用字符串(您很可能不介意),那么最好使用<a href="https://www.arduino.cc/en/Serial/ReadStringUntil" rel="nofollow noreferrer">readStringUntil</a>函数:</p>
<pre><code>string str1 = Serial.readStringUntil('\n');
string str2 = Serial.readStringUntil('\n');
</code></pre>
<p>在python中,您甚至可以将数值转换为文本:</p>
<pre><code>textStr = str(1234)
</code></pre>
<p>在Arduino一侧,您可以接收如下字符串形式的数字:</p>
<pre><code>int x = Serial.parseInt(); // Receives (string)"1234", returns (int)1234
float y = Serial.parseFloat(); // Receives (string)"1.24E13", returns (float)1.24E13
</code></pre>
<hr/>
<p>如果您需要传输结构化的二进制数据,python有一个名为<a href="https://docs.python.org/3/library/struct.html" rel="nofollow noreferrer">struct</a>的模块,这是在python中推荐的方法。在arduino方面,您很可能需要手动地洗牌字节。例如,int16的接收方式如下:</p>
<pre><code>while(Serial.available() < 2); // Block, until at least 2 bytes are received
int int16;
int16 = Serial.read() | (Serial.read()<<8); // Little-endian, low byte first, high byte second
</code></pre>