我正在使用串行连接制作一个chrome打包的应用程序,以便将数据发送到arduino,但app似乎并没有向它发送数据。这就是我已经完成并想出来的事情。
我在arduino上有一个草图,如下所示:
示意图:
#define led 13 // built-in LED
int ByteReceived;
void setup() /****** SETUP: RUNS ONCE ******/
{
Serial.begin(9600);
}
void loop() /****** LOOP: RUNS CONSTANTLY ******/
{
if (Serial.available() > 0)
{
ByteReceived = Serial.read();
if(ByteReceived == '1')
{
digitalWrite(13, HIGH);
Serial.print(" LED ON ");
}
if(ByteReceived == '0')
{
digitalWrite(13, LOW);
Serial.print(" LED OFF");
}
Serial.println(); // End the line
}
}
当我发送" 1"它只是打开LED。到arduino并在发送" 0"时将其关闭。与Arduino IDE串行监视器完美配合。
现在让我们看一下chrome app:
的manifest.json
{
"app": {
"background": {
"scripts": [ "background.js" ]
}
},
"description": "No description",
"icons": {
"256": "icon.png"
},
"manifest_version": 2,
"name": "My App",
"permissions": [ "serial", "fullscreen" ],
"version": "1.0"
}
和script.js,由manifest.json中的background.js加载:
var str2ab = function(str) {
var encodedString = unescape(encodeURIComponent(str));
var bytes = new Uint8Array(encodedString.length);
for (var i = 0; i < encodedString.length; ++i) {
bytes[i] = encodedString.charCodeAt(i);
}
return bytes.buffer;
};
var listOfSerialDevices = function(ports) {
for (var i=0; i<ports.length; i++) {
console.log(ports[i].path + ' ' + ports[i].vendorId + ' ' + ports[i].productId + ' ' + ports[i].displayName);
chrome.serial.connect(ports[i].path, function (ConnectionInfo) {
if (ConnectionInfo) {
console.log('id:' + ConnectionInfo.connectionId)
var msg = '1'
chrome.serial.send(ConnectionInfo.connectionId, str2ab(msg), function() { console.log('Message sent!')})
}
} );
}
}
chrome.serial.getDevices(listOfSerialDevices)
Console.log告诉&#34;发送消息!&#34;虽然串口显示器什么都没显此外,arduino上的TX和RX leds也不会显示来自或来自计算机的任何数据。还带领13不亮。
我还看到了两种通过chrome app连接到串行设备的解决方案,我使用了getDevices - &gt;连接 - &gt;使用Open函数而不是Connect发送但也(根本不起作用),还有chrome.serial.write而不是chrome.serial.send。如果我尝试使用写入功能控制台说,那就没有这样的功能。为什么?有两种方法可以做同样的事情吗?哪一个更好?为什么我的方法不起作用?
感谢您的帮助!
答案 0 :(得分:1)
Chrome序列API仅定义发送功能:https://developer.chrome.com/apps/serial
发送数据时似乎有错误。传递给send函数的回调函数的调用并不自动意味着它成功。您应该检查是否有错误:
chrome.serial.send(ConnectionInfo.connectionId, str2ab(msg), function(sendInfo) {
if (sendInfo.error) {
console.log(sendInfo.error);
} else if (sendInfo.bytesSent > 0) {
console.log('Message sent!');
}
});