作为一名软件工程师,我一直被宠坏了。当我写 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,而不是编译/刷新/运行/记录我的代码的每个更改。
物联网发展正在快速发展,因此我希望随着更多公司和开源贡献者的加入,我们将看到设备开发人员工作流程的更多改进。我对优化精益软件交付的新颖方法特别感兴趣.快乐黑客!