感谢EEPW和Intel提供的Intel Edison开发套件。
本楼为帖子内容索引。
~~~~~~~~~~~~~~~~~~~~~~~~~~~
3:爱迪生Edison的另一个blink -- Linux下的Mraa
感谢EEPW和Intel提供的Intel Edison开发套件。
本楼为帖子内容索引。
~~~~~~~~~~~~~~~~~~~~~~~~~~~
3:爱迪生Edison的另一个blink -- Linux下的Mraa
基于Intel® Edison的智能灯光控制系统
eepwnet
详细的开发方案
准备用Edison和配套的传感器做一个智能灯光控制系统——MikuSmartLight,本系统是基于Intel® Edison的室内环境智能管控系统的一个子系统是MikuQ物联网与智能家居的重要组成部分。因为Edison的体积非常小,只有邮票那么大,非常适合智能家居和智能可穿戴设备的开发。智能灯光控制系统内嵌Edison和传感器,可以实现远程开关灯和调色,定时智能唤醒等智能家居的功能。
作为一个爱好者,曾参与过一些Edison相关制作文章的翻译,并获赠《英特尔® Quark™ 处理器开发手册》一书。
基于Intel® Edison的智能灯光控制系统,以Edison为核心,配合Grove - Starter Kit Plus套装,有效的实现对吸顶灯的开关和调色,需要完成如下几部分的工作:
1、多色吸顶灯的选择与改造
2、主控制器的嵌入与能源供应
3、灯光与环境光的采集
4、灯光强电控制及调色
5、云端网络的接入与控制
本次活动要实现的目标
智能开灯、智能关灯、智能调色、定时唤醒,融入社交元素,朋友远程协助开灯、朋友远程协助关灯、朋友远程协助调色等。
爱迪生发明了电灯,LED灯取代了电灯,现在是爱迪生来控制LED灯的时候啦!更多功能,敬请期待!
项目雏形:http://p.xuanq.top:8848/218.htm
就不秀什么开箱美图了,直接上手就用,不过也是奇怪,说好的只有SD卡大,怎么起码的诚信都没有啊。
好吧,不算底板,只算模块,可是那密密的70pin让人怎么用啊,也先不管了,找出配套的Grove包,配套足够全,不过里边的网线用在哪里去是没找到,有伙伴说是给伽利略2用的,真周到,配送的USB充电线看起来质量挺好的。
先插着看吧,发现了两个MicroUSB口,一般是先找调试口,发现角落有一个类似FT232的片子,估计就是这个了,装了驱动却没见板子亮,莫非错了,还是板子坏了,换另一个,终于亮起了绿灯,并且识别出了一个磁盘,或许也支持mbed吧。
还附送一个usb串口和一个usb网卡,驱动是用驱动软件搜的,装完要插拔一下usb才能识别,既然有个磁盘为啥不把驱动或者向导放在盘里呢,那样多方便。
下一步要做什么,一脸迷茫,听说支持Arduino,去搜搜看怎么用。
官方资料下载地址:https://downloadcenter.intel.com/product/84574/Intel-Edison-Board-for-Arduino-
发现了一个奇怪的现象,为啥1.0.3比1.0.4新?先随便下一个吧,都是好久没有维护过的了,选新的日期吧。
Version: 1.0.4 (Previously Released) Date: 10/16/2014 Version: 1.0.3 (Previously Released) Date: 2/3/2015
下载了一个传说中闪退了许久都没更新的Arduino IDE,据说解决办法已经写进了《Intel Edison智能硬件开发指南》,可是最近修补电脑,经济拮据,还是通过网络吧。
控制面板-〉区域和语言-〉更改日期、时间或数字格式-〉格式换成“英语(美国)”选择blink程序,板卡类型Edison和串口,直接运行,很顺利。
炫Q不走寻常路,也懒得看文档,试着来吧,上次链接串口,账号root没有密码,偶然发现了USB网卡的IP是192.168.2.15也不知道是随机的还是固定,既然这样,这次直接用putty尝试,竟然真的有ssh服务,账号还是root,没有密码。
尝试了一下gcc -v,也自带了gcc,这么来说,除了arduino开发应该也支持C来开发了,迅速找个hello.c测试一下。
#include <stdio.h> int main(void){ printf("Hello, MikuQ.com!\n"); return 0; }
编译用gcc -o hello hello.c,然后运行,一切顺利!
是否也能blink呢,这就需要查一下资料了,似乎需要一个较mraa的东西,开始查询如何安装,其实内置了,只是编译的时候要加上-lmraa和MikuDuino一样一样的,开始上blink.c
#include <unistd.h> #include <stdio.h> #include "mraa/gpio.h" int main() { mraa_gpio_context gpio = mraa_gpio_init(13); mraa_gpio_dir(gpio, MRAA_GPIO_OUT); while(1){ mraa_gpio_write(gpio,1); sleep(1); mraa_gpio_write(gpio,0); sleep(1); } mraa_gpio_close(gpio); }
编译gcc -o blink blink.c -lmraa,运行./blink小灯如期闪动,不错不错!
材料准备
本次制作重点放在灯的改造上,需要准备以下材料:
三色调光LED吸顶灯x1
好大的一个6元,对了就是6元还包邮,有的小伙伴花了3元比如小撸,我花了6.5元呢,反正很核算啦,说是三色,其实是冷色、暖色、双色三种。通过反复开关灯来控制变色。
MikuRelay低功耗继电器模块x1
光耦隔离低功耗继电器,这个是MikuDuino系列的内供模块,省电又安全,一般市场上可买不到,也可以用普通继电器模块代替,建议选用带隔离的更安全。
l
双路隔离电压采集模块x1
为了本项目在分析LED灯工作原理的基础上用洞洞板自制的采集模块,主要原理是通过分压和光耦隔离,安全采集LED灯的工作状态。
AC-DC电源模块x1
选用某宝上5V700ma的模块即可,大概5元左右,也可以由手机充电器中获得,由于采用低功耗设计500mA就足够,3.3V可以由小e提供。
连接线若干
可以某宝上搜“杜邦线”,基本几块钱就一大把,各种颜色都有,使用起来非常方便。
其它工具
如烙铁、焊锡、镊子、插线板、螺丝刀等
搭建WEBSERVER
首先测试wifi环境,打开ScanNetworks项目运行
#include <SPI.h> #include <WiFi.h> void setup() { //Initialize serial and wait for port to open: Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for Leonardo only } // check for the presence of the shield: if (WiFi.status() == WL_NO_SHIELD) { Serial.println("WiFi shield not present"); // don't continue: while(true); } String fv = WiFi.firmwareVersion(); if( fv != "1.1.0" ) Serial.println("Please upgrade the firmware"); // Print WiFi MAC address: printMacAddress(); // scan for existing networks: Serial.println("Scanning available networks..."); listNetworks(); } void loop() { delay(10000); // scan for existing networks: Serial.println("Scanning available networks..."); listNetworks(); } void printMacAddress() { // the MAC address of your Wifi shield byte mac[6]; // print your MAC address: WiFi.macAddress(mac); Serial.print("MAC: "); Serial.print(mac[5],HEX); Serial.print(":"); Serial.print(mac[4],HEX); Serial.print(":"); Serial.print(mac[3],HEX); Serial.print(":"); Serial.print(mac[2],HEX); Serial.print(":"); Serial.print(mac[1],HEX); Serial.print(":"); Serial.println(mac[0],HEX); } void listNetworks() { // scan for nearby networks: Serial.println("** Scan Networks **"); int numSsid = WiFi.scanNetworks(); if (numSsid == -1) { Serial.println("Couldn't get a wifi connection"); while(true); } // print the list of networks seen: Serial.print("number of available networks:"); Serial.println(numSsid); // print the network number and name for each network found: for (int thisNet = 0; thisNet<numSsid; thisNet++) { Serial.print(thisNet); Serial.print(") "); Serial.print(WiFi.SSID(thisNet)); Serial.print("\tSignal: "); Serial.print(WiFi.RSSI(thisNet)); Serial.print(" dBm"); Serial.print("\tEncryption: "); printEncryptionType(WiFi.encryptionType(thisNet)); } } void printEncryptionType(int thisType) { // read the encryption type and print out the name: switch (thisType) { case ENC_TYPE_WEP: Serial.println("WEP"); break; case ENC_TYPE_TKIP: Serial.println("WPA"); break; case ENC_TYPE_CCMP: Serial.println("WPA2"); break; case ENC_TYPE_NONE: Serial.println("None"); break; case ENC_TYPE_AUTO: Serial.println("Auto"); break; } }
找到所在的SSID,然后修改SimpleWebServerWiFi,由于我们的扩展板最大IO是D8所以修改代码中的9为8,添加LED模块,运行代码
void loop() { WiFiClient client = server.available(); // listen for incoming clients if (client) { // if you get a client, Serial.println("new client"); // print a message out the serial port String currentLine = ""; // make a String to hold incoming data from the client while (client.connected()) { // loop while the client's connected if (client.available()) { // if there's bytes to read from the client, char c = client.read(); // read a byte, then Serial.write(c); // print it out the serial monitor if (c == '\n') { // if the byte is a newline character // if the current line is blank, you got two newline characters in a row. // that's the end of the client HTTP request, so send a response: if (currentLine.length() == 0) { // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK) // and a content-type so the client knows what's coming, then a blank line: client.println("HTTP/1.1 200 OK"); client.println("Content-type:text/html"); client.println(); // the content of the HTTP response follows the header: client.print("Click <a href=\"/H\">here</a> turn the LED on pin 8 on<br>"); client.print("Click <a href=\"/L\">here</a> turn the LED on pin 8 off<br>"); // The HTTP response ends with another blank line: client.println(); // break out of the while loop: break; } else { // if you got a newline, then clear currentLine: currentLine = ""; } } else if (c != '\r') { // if you got anything else but a carriage return character, currentLine += c; // add it to the end of the currentLine } // Check to see if the client request was "GET /H" or "GET /L": if (currentLine.endsWith("GET /H")) { digitalWrite(8, HIGH); // GET /H turns the LED on } if (currentLine.endsWith("GET /L")) { digitalWrite(8, LOW); // GET /L turns the LED off } } } // close the connection: client.stop(); Serial.println("client disonnected"); } }
运行结果
Attempting to connect to Network named: MikuQ SSID: MikuQ IP Address: 192.168. 1. 8 signal strength (RSSI):-38 dBm To see this page in action, open a browser to http://192.168. 1. 8
这样我们就可以通过手机浏览器访问192.168.1.8来控制LED了
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【笔记】生成报错synthdesignERROR被打赏50分 | |
【STM32H7S78-DK评测】LTDC+DMA2D驱动RGBLCD屏幕被打赏50分 | |
【STM32H7S78-DK评测】Coremark基准测试被打赏50分 | |
【STM32H7S78-DK评测】浮点数计算性能测试被打赏50分 | |
【STM32H7S78-DK评测】Execute in place(XIP)模式学习笔记被打赏50分 | |
每周了解几个硬件知识+buckboost电路(五)被打赏10分 | |
【换取逻辑分析仪】RA8 PMU 模块功能寄存器功能说明被打赏20分 | |
野火启明6M5适配SPI被打赏20分 | |
NUCLEO-U083RC学习历程2-串口输出测试被打赏20分 | |
【笔记】STM32CUBEIDE的Noruletomaketarget编译问题被打赏50分 |