博客 页面 22

如何看待用javascript进行硬件开发

投资人和一些朋友都问过我,如何看待使用javascript进行硬件开发。

我的表达如下:

用javascript开发硬件,意味着转发web程序猿进行硬件开发,问题是有几个web程序有硬件开发基础?硬件开发,仅仅是编程么?

建立一个中间层转化原本的硬件接口,有什么直接优势么?相较于arduino优势在哪里?

1.能降低web程序猿的学习成本

2.脚本语言不用编译,理论上,调试起来比C语言方便一点

对于一个零基础的人,你学习使用arduino进行开发,肯定比学javascript的开发平台简单。

 

为什么还有人要去做这事,我觉得两个原因:

1.近几年的行业发展,使得市场培养了很多web程序猿;

2.web程序猿的热忱,在他们心中javascript是最好的语言。

计划写一个开发平台评测

计划比较的平台如下:

对开发平台的定义:

1.在原始的硬件开发上形成了一定规范

2.

 

Arduino

Raspberry Pi

mbed

micropython

Tessel/espruino/ruff.io

 

提高开发人员工作效率的五大神器

古人言,工欲善其事,必先利其器!做硬件开发也是这样,

 

Arduino

 

 

3D打印机

通常刚研发或设计完成的产品均需要做手板(prototype),手板是验证产品可行性的第一步,是找出设计产品的缺陷、不足、弊端最直接且有效的方式,从而对缺陷进行针对性的改善。

但如果你有过做手板的经验,一定感叹其价格之贵

 

 

github

 

 

使用Genuino 101神经元进行长动作的识别

#include <CurieIMU.h>
#include <CuriePME.h>
#include <CurieBLE.h>
#include <SerialFlash.h>
#include <SPI.h>

#include "buzzer.h"
#include "loadIMU.h"
//#include "saveLoad.h"
//#include "loadIMUa.h"
//#include "SaveAndLoad.h"


Buzzer buzzer(6);
int buttonPin = 8;

void setup()
{
  pinMode(buttonPin, INPUT_PULLUP);
  Serial.begin(115200);
  while (!Serial);
  CurieIMU.begin();
  CuriePME.begin();
  //    pinMode(buttonPin, INPUT_PULLUP);
  //    if (digitalRead(buttonPin)==HIGH)
  //    {
  //        //加载数据,并进入识别模式
  //        // restoreNetworkKnowledge();
  //    }else
  //    {
  //        //学习数据,并存入Flash
  //        // saveNetworkKnowledge();
  //    }

  Serial.println("test test");
  CurieIMU.begin();
  CuriePME.begin();
  CurieIMU.setAccelerometerRate(1600);
  CurieIMU.setAccelerometerRange(2);


  //    while (digitalRead(buttonPin) == HIGH);
  Serial.println("Training begin===============================");
  Serial.println("3");
  delay(1000);
  Serial.println("2");
  delay(1000);
  Serial.println("1");
  delay(1000);
  Serial.println("Training begin");
  training1(5);
  Serial.println("Training begin===============================");
  Serial.println("3");
  delay(1000);
  Serial.println("2");
  delay(1000);
  Serial.println("1");
  delay(1000);
  Serial.println("Training begin");
  training2(5);
  Serial.println("Training begin===============================");
  Serial.println("3");
  delay(1000);
  Serial.println("2");
  delay(1000);
  Serial.println("1");
  delay(1000);
  Serial.println("Training begin");
  training3(5);
}
byte vector[128];
void loop()
{
  // while(digitalRead(buttonPin)==HIGH);
  // delay(10);

  readVectorFromIMU(vector);
  unsigned int category = CuriePME.classify(vector, 128);
  if (category == CuriePME.noMatch)
  {
    Serial.println("noMatch");
  }
  else
  {
    Serial.println(category);
  }
}


//连续动作识别
void training1(int trainingReps)
{
  unsigned int currentTraining = 0;
  unsigned int actionsLen = 3;
  while (currentTraining < trainingReps)
  {
    buzzer.bbb();
    currentTraining++;
    Serial.println(currentTraining);
    unsigned int currentAction = 0;
    byte vector1[128];
    byte vector2[128];
    byte vector3[128];
    //        byte vector4[128];
    readVectorFromIMU(vector1);
    readVectorFromIMU(vector2);
    readVectorFromIMU(vector3);
    //        readVectorFromIMU(vector4);
    CuriePME.learn(vector1, 128, 1);
    CuriePME.learn(vector2, 128, 2);
    CuriePME.learn(vector3, 128, 3);
    //        CuriePME.learn(vector4, 128, 4);
    Serial.println("Got it!");
    buzzer.end();
  }
}

void training2(int trainingReps)
{
  unsigned int currentTraining = 0;
  unsigned int actionsLen = 3;
  while (currentTraining < trainingReps)
  {
    buzzer.bbb();
    currentTraining++;
    Serial.println(currentTraining);
    unsigned int currentAction = 0;
    byte vector1[128];
    byte vector2[128];
    byte vector3[128];
    //        byte vector4[128];
    readVectorFromIMU(vector1);
    readVectorFromIMU(vector2);
    readVectorFromIMU(vector3);
    //        readVectorFromIMU(vector4);
    CuriePME.learn(vector1, 128, 5);
    CuriePME.learn(vector2, 128, 6);
    CuriePME.learn(vector3, 128, 7);
    //        CuriePME.learn(vector4, 128, 8);
    Serial.println("Got it!");
    buzzer.end();
  }
}

void training3(int trainingReps)
{
  unsigned int currentTraining = 0;
  unsigned int actionsLen = 3;
  while (currentTraining < trainingReps)
  {
    buzzer.bbb();
    currentTraining++;
    Serial.println(currentTraining);
    unsigned int currentAction = 0;
    byte vector1[128];
    byte vector2[128];
    byte vector3[128];
    //        byte vector4[128];
    readVectorFromIMU(vector1);
    readVectorFromIMU(vector2);
    readVectorFromIMU(vector3);
    //        readVectorFromIMU(vector4);
    CuriePME.learn(vector1, 128, 9);
    CuriePME.learn(vector2, 128, 10);
    CuriePME.learn(vector3, 128, 11);
    //        CuriePME.learn(vector4, 128, 12);
    Serial.println("Got it!");
    buzzer.end();
  }
}

 

灯灯提供的101 BLE广播例程

#include <CurieBLE.h>

BLEService broadcastService("");
BLEUnsignedShortCharacteristic broadcastChar("1234", BLEBroadcast);

void setup() {
  BLE.begin();
  BLE.setLocalName("Arduino 101");
  broadcastChar.broadcast();
  broadcastService.addCharacteristic(broadcastChar);
  BLE.addService(broadcastService);
}

void loop() {
  static unsigned short i = 0;
  broadcastChar.writeValue(i++);
  delay(1000);
}

 

 

更多:

http://www.arduino.cn/thread-45640-1-1.html

Blender教程收集

blender中国:http://i.youku.com/u/UMTgzMTA0NDc2MA==?spm=a2h0k.8191407.0.0

 

雕刻入门:
玩转blender-013-01雕刻入门01-基本用户设置

创业公司不能招哪些人

1.应届毕业生

2.频繁跳槽的人

3.

对pyside、pyqt、wxpython、kivy的比较

pyside
qt官方支持,最新版本是pyside2,但pip还安装不了,只能自己编译

pyqt

wxpython

kivy

pyqt5学习资料收集

教程:http://www.cnblogs.com/archisama/tag/PyQt5/
http://blog.csdn.net/a359680405/article/details/45096185

图片收集