【问题标题】:How to replicate pyserial sending RGB values to Arduino in jUART?如何在 jUART 中复制 pyserial 向 Arduino 发送 RGB 值?
【发布时间】:2016-12-14 23:33:19
【问题描述】:

我一直在本地运行的 Python 应用程序中使用 pyserial 将 RGB 值发送到 Arduino:

import serial
import struct

ser = serial.Serial('/dev/ttyACM0', 9600)

ser.write(struct.pack('>3B', red_value, green_value, blue_value))

# where the rgb values are ints like 77,75, 0

我现在想从非本地网站实现此功能。

jUART似乎就是为此目的而设计的,即:

用于串口通信的跨平台浏览器插件 JavaScript

它要求用户为他们正在使用的系统和浏览器创建一个插件。

我已经尽可能地按照他们的main GitHub page 上的说明进行操作,但我对参数的理解不足以定义它们的值,而且我之前没有制作过浏览器插件,所以不确定我是否我错过了一些东西。

我正在使用Ubuntu 16.04 和Firefox 48 for Ubuntu 并已复制:

bin/Linux/npjUART.so

到:

~/.mozilla/extensions

HTML

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Serial Test</title>
<script src="serial.js"></script>
</head>
<body>

</body>
</html>

Javascript (serial.js)

//Get a Serial object
var ser = plugin().Serial;

// Open a port
ser.open("/dev/ttyACM0");

// Set port options
/*
baud: Baud rate

parity: 0->none, 1->odd, 2->even

csize: 5 6 7 8

flow: 0->none, 1->software, 2->hardware

stop: 0->one, 1->onepointfive, 2->two
*/

var baud = "";
var parity = "";
var csize = "";
var flow = "";
var stop = "";

ser.set_option(baud, parity, csize, flow, stop);

// Send a byte to serial port
char = "";

ser.send(char);

问题

01) 上述Javascript中的空值应该是什么?

02) 我还需要关注To Buildinstructions吗?

03) 要让jUART 复制上面显示的原始pyserial 程序,我还需要做些什么吗?

编辑:

根据用户建议查看 pyserial 默认值然后复制它们,它们似乎在这里:

https://pythonhosted.org/pyserial/pyserial_api.html#serial.Serial

__init__(port=None, baudrate=9600, bytesize=EIGHTBITS, parity=PARITY_NONE, stopbits=STOPBITS_ONE, timeout=None, xonxoff=False, rtscts=False, write_timeout=None, dsrdtr=False, inter_byte_timeout=None)

因此,jUART 变量可能是:

var baud = 9600;
var parity = 0;
var csize = 8; // based on user comment
var flow = 0; // based on user comment
var stop = 0;

当我在 js 文件中打开具有上述值的 html 文件时,我在 Firebug 中得到以下信息:

ReferenceError: 插件未定义

Arduino Sketch:(供参考)

// digital output pin numbers
const int digitalOutputPinForRedLED = 9;
const int digitalOutputPinForGreenLED = 10;
const int digitalOutputPinForBlueLED = 11;

// global variables
int valueOfRed = 0;
int valueOfGreen = 0;
int valueOfBlue = 0;
int x = 1;

void setup() {
  // initialize serial communications at 9600 bps:
  Serial.begin(9600); 

  // set digital pin modes
  pinMode(digitalOutputPinForRedLED,OUTPUT);
  pinMode(digitalOutputPinForGreenLED,OUTPUT);
  pinMode(digitalOutputPinForBlueLED,OUTPUT);
}

void loop() {

  if (Serial.available()) {
    if (x==1) {
     valueOfRed = Serial.read();
     Serial.print("Red: ");
     Serial.println(valueOfRed);
     analogWrite(digitalOutputPinForRedLED, valueOfRed);
   }
    else if (x==2) {
     valueOfGreen = Serial.read();
     Serial.print("Green: ");
     Serial.println(valueOfGreen);
     analogWrite(digitalOutputPinForGreenLED, valueOfGreen);
   }
    else if (x==3) {
     valueOfBlue = Serial.read();
     Serial.print("Blue: ");
     Serial.println(valueOfBlue);
     analogWrite(digitalOutputPinForBlueLED, valueOfBlue);
   }
   x++;
 }
    else {
      x = 1; 
     }
delay(1);
}

【问题讨论】:

  • 基于python代码波特显然是9600。所有其他值似乎都是pyserial中的默认值。阅读 pyserial 文档以了解默认奇偶校验位和停止位是什么。除非您使用流量控制,否则通常没有流量控制。并且数据大小 (csize) 通常为 8 位,除非您真的在与非常旧的 7 位设备通话。

标签: javascript arduino-uno pyserial


【解决方案1】:

查看文档,您唯一错过的是将插件添加到 PLUGINS 目录。将已编译的插件从 git 复制到 ~/.mozilla/plugins/ 而不是 ~/.mozilla/extensions

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-07
    • 2012-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-07
    • 2021-11-26
    • 1970-01-01
    相关资源
    最近更新 更多