编程 BeagleBone 以打开 LED,出现 NodeJS 错误

Programming the BeagleBone to turn on LED, Got NodeJS errors

作业是关于嵌入式系统的。我们正在学习如何使用 BeagleBone Black 以及如何使用它来制作小型设备,例如可以测量温度和脉搏的设备。​​

我们第一个作业的一部分是遵循本指南:https://randomnerdtutorials.com/programming-the-beaglebone-black-with-bonescript/

我们需要在 Node JS 中创建一个服务器,在 html 中创建一个索引。该站点提供了用于控制通过 BeagleBone Black 连接到面包板的 LED 灯的按钮。

我已将 LED、引脚和电线连接到 BeagleBone Black。安装 Ubuntu 18.14、NodeJS、npm socket.io 和 Bonescript(BeagleBone 专用脚本)。

使用Cloud 9 IDE到运行server.js和index.html。 但是我在 Ubuntu.

中使用终端

要启动服务器,我使用此命令:node server.js

我试了好几天才把服务器和index.html改成运行, 但我收到此错误或什么都没发生:

/home/ubuntu/bonescript/server.js:42
var io = require('socket.io').listen(server);
                              ^

[TypeError: require(...).listen is not a function
  at Object.<anonymous> (/home/ubuntu/bonescript/server.js:42:31)
  at Module._compile (internal/modules/cjs/loader.js:1137:30)
  at Object.Module._extensions..js (internal/modules/cjs/loader.js:1157:10)
  at Module.load (internal/modules/cjs/loader.js:985:32)
  at Function.Module._load (internal/modules/cjs/loader.js:878:14)
  at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12)
  at internal/main/run_main_module.js:17:47

谁能帮我查明问题所在?我真的卡在这个舞台上了。谢谢

index.html代码:

<!DOCTYPE html>
<html>
<head>
    <title>Home Automation Web Server with BeagleBone</title>
    <script src = "/socket.io/socket.io.js" ></script>
    <script>
        // Establishing connection with server
        var socket = io.connect();

        // Changes the led state
        function changeState(state){
            if (state==1){
                // Emit message changing the state to 1
                socket.emit('changeState', '{"state":1}');
                // Change led status on web page to ON
                document.getElementById("outputStatus").innerHTML = "Status: ON";
            }
            else if (state==0){
                // Emit message changing the state to 0
                socket.emit('changeState', '{"state":0}');
                // Change led status on web page to OFF
                document.getElementById("outputStatus").innerHTML = "Status: OFF";
            }
        }
    </script>
</head>
    <h2>LED</h2>
    <p id="outputStatus">Status</p>
    <button type="button" onclick="changeState(1);">ON</button>
    <button type="button" onclick="changeState(0);">OFF</button>
</div>
</body>
</html>

server.js代码:

//Loading modules
var http = require('http');
var fs = require('fs');
var path = require('path');
var b = require('bonescript');

// Create a variable called led, which refers to P9_14
var led = "P9_14";
// Initialize the led as an OUTPUT
b.pinMode(led, b.OUTPUT);

// Initialize the server on port 8888
var server = http.createServer(function (req, res) {
    // requesting files
    var file = '.'+((req.url=='/')?'/index.html':req.url);
    var fileExtension = path.extname(file);
    var contentType = 'text/html';
    // Uncoment if you want to add css to your web page
    /*
    if(fileExtension == '.css'){
        contentType = 'text/css';
    }*/
    fs.exists(file, function(exists){
        if(exists){
            fs.readFile(file, function(error, content){
                if(!error){
                    // Page found, write content
                    res.writeHead(200,{'content-type':contentType});
                    res.end(content);
                }
            })
        }
        else{
            // Page not found
            res.writeHead(404);
            res.end('Page not found');
        }
    })
}).listen(8888);

// Loading socket io module
var io = require('socket.io').listen(server);

// When communication is established
io.on('connection', function (socket) {
    socket.on('changeState', handleChangeState);
});

// Change led state when a button is pressed
function handleChangeState(data) {
    var newData = JSON.parse(data);
    console.log("LED = " + newData.state);
    // turns the LED ON or OFF
    b.digitalWrite(led, newData.state);
}

// Displaying a console message for user feedback
server.listen(console.log("Server Running ..."));

socket.io 是内部库,不是外部库。因此,当您 运行 npm install socket.io 时,您下载的内容不是您想要的 socket.io。

删除您的 node_modules,并从 package.json 中删除 socket.io,然后通过 npm install 重新安装 bonescript。然后它应该工作。

我有同样的问题但是已经解决了这个网站上的代码是基于旧节点版本的,你必须在线更改代码

var io = require('socket.io').listen(server); 

var io = require('socket.io')(server);

并编辑变量或删除此行,因为较新的节点不能两次使用 .listen 函数(代码已经在服务器 var 上使用它来打开端口 8888)

server.listen(console.log("Server Running ..."));