【问题标题】:serial communication between Arduino and NodemcuArduino和Nodemcu之间的串行通信
【发布时间】:2019-08-30 17:35:40
【问题描述】:

我正在尝试使用 arduino uno 中的模拟引脚 A0 读取电压值,并将读取的电压传输到 Nodemcu,但在 NodeMcu 上没有获得与 Ex 的 Arduino 端相同的电压。对于 Arduino 的 5 伏,我在 Nodemcu 上只有 4 伏。

我已经使两个草图的延迟相等,甚至尝试过没有任何延迟 还尝试连接两个设备的接地引脚

                          ARDUINO CODE


  #include <SoftwareSerial.h>
  SoftwareSerial s(5,6);


  void setup() {

  s.begin(9600);
  Serial.begin(9600);
  }


  void loop() {
  // read the input on analog pin 0:
  int ADCdata = analogRead(A0);

 float voltage = (ADCdata * 0.0048828125);
 Serial.println(ADCdata);
 Serial.println(voltage);
 if(s.available()>0)
  {
   s.write(voltage);
  }
 delay(1000);
 }

                         NODEMCU CODE

    #include <SoftwareSerial.h>
    SoftwareSerial s(D6,D5);


    void setup() {
    s.begin(9600);
    Serial.begin(9600);
    }
    void loop() {

    s.write("s");
    if (s.available()>0)
    {
    data=s.read();
    Serial.println(data);
    }
     delay(1000);
   }

【问题讨论】:

  • s.write(voltage); 将写入 sizeof(float) 字节。在接收端,您需要读取那么多字节并重新组合为float
  • 在这种情况下,你可以提出一些替代方案
  • 您可以使用Serial.println(value) 作为字符串发送并使用data = Serial.parseFloat() 读取。
  • 但 Serial.println() 用于在串行监视器上打印,如果我错了,请纠正我。
  • 抱歉,忘记您使用的是SoftwareSerial。是的,应该是s.println(value)s.parseFloat()

标签: arduino nodemcu serial-communication


【解决方案1】:

我会将浮点数据作为字符串发送:

s.println(value)

这将添加一个换行符来标记字符串的结尾。

在接收端,读取该行并转换为浮点数。

float value = s.parseFloat();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-18
    • 1970-01-01
    • 2015-12-02
    相关资源
    最近更新 更多