使用node-red快速构建物联网应用

一、什么是Node-Red?

Node-Red是由IBM创建的开源项目,它是一个用来实现物联网的可视化编辑器,它旨在让开发人员更加专注物与物的连接,避免纠缠于繁琐的代码,它可以运行在大多数linux平台上,包括但不局限于树莓派这样的廉价linux主机。

系统由一个一个的“NODE”构成,每个“NODE”可以提供不同的功能,你可以通过拖拽,连线来组成一个完整的流程。用来构建一个通常意义上的物联网应用。

下图演示了一个将cpu温度上传到IBM watson物联网平台的过程,是不是很简单呢?我们会在本文中介绍详细的实现过程。

 

Continue reading

Geek的又一台电脑!运行着Ubuntu Mate系统的MXQ-PRO!

MXQ PRO 4K是一款广受欢迎的机顶盒,它的CPU采用晶晨半导体的S905四核处理器,GPU使用Mali450,性能强劲,由于晶晨官方开放了Uboot,GPU,内核等等的底层源码,所以对于爱好者来说,可玩性就高了很多。大家可以到下面的网址下载这些源码:
http://openlinux.amlogic.com:8000/download/ARM/
还有国外一个专门折腾机顶盒的网站,推荐给喜欢的朋友:
http://www.cnx-software.com/

Continue reading

MicroPython:擦除开发板的FLASH

在平常使用MicroPython for ESP8266的过程中,经常有同学反应,我的程序写错了或者其他一些原因导致开发板无法正常启动,我们可以通过擦除Flash,然后重新烧写固件的方式尝试让开发板重新启动。
我们使用esptool这一工具,对开发板进行操作,这个工具有很多功能,我们今天只使用它来擦除flash,实际上它经常用来更新固件:
我们首先安装程序:
sudo git clone https://github.com/themadinventor/esptool
查看当前目录,会出现一个名为esptool的文件夹,进入该文件夹,输入以下命令安装:
sudo python setup.py install
如果在安装过程中卡住了,可以CTRL-C重试。
安装好以后就可以试用了,我们将板子连接电脑,就绪后,使用以下命令:
sudo esptool.py --port /dev/ttyUSB0 erase_flash
等出现下图所示的那样,就说明完成了.

Continue reading

Ngrok!随时随地访问你的计算机!

当我们拥有了一台运行着linux的主机,便希望可以随时随地的访问它,在以前,我们可以使用花生壳,nat123等服务商提供的内网穿透服务,但是现在,似乎有更好更便利的工具了。
通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道,Ngrok可以让我们随时随地访问自己的主机。

由于ngrok官方服务器在国外,访问很慢而且很容易掉线,好在国内很多人也能提供相同的服务,我们今天使用natapp.cn提供的服务:

Continue reading

MicroPython:将开发板连入物联网云平台

MicroPython和一般的python一样,也有很多第三库,多亏了这些类库,使得我们能使用少量语句,就可以完成其他语言大量代码才能完成的工作,大家可以到 www.github.com/micropython/micropython-lib , 查看,下载这些类库,使用工具传到板子上,一个import 就可以使用了。

本次,我们使用搭载ESP8266模块的MicroPython开发板,导入了umqtt.simple.py模块,该模块是对MQTT协议的封装,我们使用MQTT协议,接入中国移动ONENET物联网平台,我们的目的是在物联网平台上发送命令,控制开发板上自带的LED,我们发送‘on’,使得LED亮起,发送‘off’使得LED熄灭。

Continue reading

MicroPython:开发板的模拟I/O操作

ADC:

模数转换(ADC)是一个常见的单片机外设,它能将模拟的电压值转换为二进制数据,它非常适合用来读取传感器的物理值,一般的传感器经过一些电路的转换就可以将生活中的物理量转化为电信号,从而被单片机这样的控制设备读取.

对于MicroPython,感谢乔治-达明(Damien George)做了大量的工作,使我们只用使用一条Python语句就可以控制ESP8266的各种外设,值得注意的是MicroPython支持很多芯片,ESP8266只是其中之一而每种芯片的特性是不同的,拿ADC来说:

ESP8266的ADC是十位精度的,并且读取的电压值最大不能超过1v,如果电压值过大很有可能会损坏开发板.

官方出的Pyboard,使用的是STM32芯片,它的ADC是12位精度的并且能读取的最大电压值是3.3v.

下面我们将演示如果读取ADC的值:

import machine
adc = machine.ADC(0)
adc.read()

Continue reading

制作:安卓手机遥控小车

市面上的智能小车已经很多了,循迹的,避障的,手机遥控的,种类繁多,我们芝麻DIY终于也推出一款小车,很遗憾,它只有一个功能,那就是手机wifi遥控,本文介绍该小车的组成部分,解释部分源码。

虽然我们的功能很简单,但这同时也是我们最大的优点,我们的电路结构非常简易,十分适合手工操作,硬件包括:STC15单片机一块,ESP8266串口转WIFI模块一个,L9110s两路电机驱动模块一个,还有电阻,排针插座,线缆等其他一些小部件。

Continue reading

MicroPython:导入第三方模块

Python语言之所以如此受欢迎原因之一就是由于他有许多第三方包和类库,大大简化了编程难度,MicroPython也是如此,对于MicroPython自带的诸如OS,sys,time等我们只需要一个import就可以很轻松的将其导入,但是如果使系统不存在的模块就需要我们自己将其导入进去了。
本文探讨将包导入到开发板的方法,抛砖引玉,如果有意见或建议可以到下方评论区留言或者到论坛发帖。
就像普通的python版本一样,MicroPython也支持直接import脚本,我们可以自己编写一个.py脚本文件,然后传入开发板。
下图演示了,将自己的代码文件传入开发板的过程:

Continue reading

简易的单片机时钟

今天我们分享一个8051单片机的小制作。
这次的制作之所以说他简单,是因为它的电路简单,程序简单,当然功能也很简单,只能显示时和分,没有按键,通过串口调时间。
下面,我们将单片机程序,原理图,和实物图发布上来,注意,本制作使用STC89C52单片机,不保证对其他型号51单片机的兼容:
单片机程序:

#include
#include
//unsigned char table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//共阳数码管数字码
unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//共阴数码管数字码
int time=2115,qian,bai,shi,ge,miao,num,time_shi=22,time_fen=31;

void delay()
{int a=500;
while(a--);
}

void display() //数码管动态扫描
{
qian=time_shi/10; //数码管个位
bai=time_shi%10; //十位
shi=time_fen/10; //百位
ge=time_fen%10; //千位
P0=table[ge];
P2=0xf7;
delay();
P2=0xff;

P0=table[shi];
P2=0xfb;
delay();
P2=0xff;

P0=table[bai];
P2=0xfd;
delay();
P2=0xff;

P0=table[qian];
P2=0xfe;
delay();
P2=0xff;

}

void main()
{
TMOD = 0x21;
SCON = 0x50;
TH1 = 0xd0;
TL1 = TH1;
EA = 1;
ET0 = 1;
TI=1;
ES = 1;
TR1 = 1;
TH0=(65536-45872)/256; //定时器初始化
TL0=(65536-45872)%256;
TR0 = 1;
while(1)
{
display();
if (time_fen==60) //如果分=60,时+1
{time_shi++;
time_fen=0;}
if(time_shi==24) //如果时=24,分时归零
{
time_shi=0;
time_fen=0;
}
} }

void inter() interrupt 1 //定时器中断
{
TH0=(65536-46083)/256;
TL0=(65536-46083)%256;
num++;
if(num==20)
{
num=0;
miao++;
P1=miao;
if (miao==60)
{
time_fen++;
miao=0;
} }
}

void UARTInterrupt(void) interrupt 4
{
if(RI)
{
RI = 0;
if(SBUF==1){time_shi++;} //收到‘1’,时+1
if(SBUF==2){time_fen++;} //收到‘2’,分+1
ES=0;
TI=1;
printf("NOW TIME IS %d : %d \n",time_shi,time_fen); //当串口收到信息时,输出消息
ES=1;
TI=0;
}
else
TI=0;
}

原理图:
原理图省略了时钟,复位和供电电路。
Continue reading