粒子核心/光子的调试代码

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观

作为一名软件工程师,我一直被宠坏了。当我写 python、ruby 或 javascript 时,我有一个 repl 来尝试不同的想法。我可以在 pycharm、rubymine 或 chrome devtools 中设置断点以随时检查我的堆栈。反馈周期短。我可以 tdd,即使有基础设施代码。为硬件开发代码并不是那么简单。在这篇文章中,我将分享我当前为设备编写代码的工作流程。

硬件凌乱;这就是它乐趣的一部分。在空闲时间,我会研究硬件:微控制器、传感器和机器人。为 arduino 和粒子设备编写代码可能会令人沮丧。可能很难说出为什么某些东西不起作用。您的代码是完美的,但是您的某个地方的连接断开了,或者您正在试用的新传感器在运输过程中损坏了。或者你的代码有bug,但是在纷乱的中断中很难说出你的执行路径是什么。

当你为粒子设备编写代码时,你是在他们的 web ide 中完成的。这太棒了,您可以轻松地编译代码、刷新设备并根据需要添加不同的社区库。尽管该 ide 不包含控制台,因此您不能只将值发送到控制台进行检查。但是,您可以将事件从您的设备发布到粒子云。我在我的应用程序中编写了这个 debug 函数的某个版本。


 // log message to cloud, message is a printf-formatted string
void debug(string message, int value) {
    char msg [50];
    sprintf(msg, message.c_str(), value);
    spark.publish("debug", msg);
}

// toggle leds on and off, given a string like "7,0" or "4,1" int ledtoggle(string command) { int ledpin = -1; char * params = new char[command.length() + 1];

strcpy(params, command.c_str());
char * param1 = strtok(params, ",");
char * param2 = strtok(null, ",");

if (param1 != null && param2 != null) {
    ledpin = atoi(param1);
    debug("ledpin = %d", ledpin);
    // check for valid digital pin
    if (ledpin >= 0 && ledpin < 8) { 
        int mode = (bool(atoi(param2)) ? high : low)
        debug("mode = %d", mode);
        digitalwrite(ledpin, mode);
        return 0;
    }
}
return -1;

}

现在我可以打开 粒子仪表板 中的日志部分并使用 粒子 cli 运行命令来调试我的代码。


 // log message to cloud, message is a printf-formatted string
void debug(string message, int value) {
    char msg [50];
    sprintf(msg, message.c_str(), value);
    spark.publish("debug", msg);
}

// toggle leds on and off, given a string like "7,0" or "4,1" int ledtoggle(string command) { int ledpin = -1; char * params = new char[command.length() + 1];

strcpy(params, command.c_str());
char * param1 = strtok(params, ",");
char * param2 = strtok(null, ",");

if (param1 != null && param2 != null) {
    ledpin = atoi(param1);
    debug("ledpin = %d", ledpin);
    // check for valid digital pin
    if (ledpin >= 0 && ledpin < 8) { 
        int mode = (bool(atoi(param2)) ? high : low)
        debug("mode = %d", mode);
        digitalwrite(ledpin, mode);
        return 0;
    }
}
return -1;

}

我不是 C++ 大师,所以我一直在使用 ideaone 的在线 C++14 编译器和解释器 来测试少量代码。这个工具确实加快了我的工作流程。我通常在 ideaone 中模拟一个函数,然后在我让它工作时将其带入粒子网络 ide,而不是编译/刷新/运行/记录我的代码的每个更改。

物联网发展正在快速发展,因此我希望随着更多公司和开源贡献者的加入,我们将看到设备开发人员工作流程的更多改进。我对优化精益软件交付的新颖方法特别感兴趣.快乐黑客!