PHP再学习5——RESTFul框架 远程控制LED
0.前言
【PHP学习笔记——索引博文】
- CREATE TABLE IF NOT EXISTS `leds` (
- id int(11) NOT NULL AUTO_INCREMENT,
- description text NOT NULL,
- status text NOT NULL,
- PRIMARY KEY (id)
- ) DEFAULT CHARSET=utf8;
- INSERT INTO leds (id, description , status) VALUES (1, 'raspberry pi pcf8574-IO1','on');
- INSERT INTO leds (id, description , status) VALUES (2, 'raspberry pi pcf8574-IO2','off');
- <?php
- require 'rb.php';
- require 'Slim/Slim.php';
- \Slim\Slim::registerAutoloader();
- // 初始化数据库连接
- R::setup('mysql:host=localhost;dbname=mysql','root','<your password>');
- R::freeze(true);
- $app = new \Slim\Slim();
- // GET /leds
- $app->get('/leds', function () use ($app) {
- // 查找所有设备
- $led_array = R::getAll('select * from leds');
- $app->response()->header('Content-Type', 'application/json');
- // 按照JSON格式输出
- echo json_encode( $led_array , JSON_NUMERIC_CHECK);
- });
- $app->run();
- ?>
- // GET /leds/:id
- $app->get('/leds/:id', function ($id) use ($app) {
- try {
- // 查询数据库,只返回status状态
- $led_single = R::getRow('select status from leds where id = :id',array(':id'=>$id));
- if ($led_single) {
- $app->response()->header('Content-Type', 'application/json');
- // 按照JSON格式输出
- echo json_encode( $led_single, JSON_NUMERIC_CHECK);
- }
- else {
- $app->response()->status(404);
- }
- }
- catch (ResourceNotFoundException $e) {
- $app->response()->status(404);
- }
- catch (Exception $e) {
- $app->response()->status(400);
- $app->response()->header('X-Status-Reason', $e->getMessage());
- }
- });

- $app->put('/leds/:id', function ($id) use ($app) {
- try {
- // 获得HTTP请求中的JSON数据包
- $request = $app->request();
- $body = $request->getBody();
- $input = json_decode($body);
- // 查找编号为ID的记录
- $led = R::findOne('leds', 'id=?', array($id));
- // 重新修改status状态,并保存
- if ($led) {
- $led->status = (string)$input->status;
- R::store($led);
- } else {
- throw new ResourceNotFoundException();
- }
- } catch (ResourceNotFoundException $e) {
- $app->response()->status(404);
- } catch (Exception $e) {
- $app->response()->status(400);
- $app->response()->header('X-Status-Reason', $e->getMessage());
- }
- });


- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- import requests
- import smbus
- import RPi.GPIO as GPIO
- import time
- # 打开 /dev/i2c-1
- bus = smbus.SMBus(1)
- # 设备URI
- apiurl = 'http://192.168.1.100/leds/1'
- while True:
- #发送请求
- r = requests.get(apiurl)
- # 打印内容
- print(r.text)
- # 响应转换内容为字典形式
- # 转换为字典类型 请注意 2.7.4版本使用r.json()
- led = r.json
- # {'value':'xx'} on打开状态,off关闭状态
- if led['status'] == 'on':
- print("led on")
- bus.write_byte( 0x20 , 1 )
- else:
- print("led off")
- bus.write_byte( 0x20 , 0 )
- # 延时5S
- time.sleep(5)

PHP再学习5——RESTFul框架 远程控制LED的更多相关文章
- 树莓派学习笔记——Restful服务 采用slim php apache
0.前言 前些时间沉迷于Restful,采用PHP+Slim+MySQL实现了一些简单的API函数.但是这些工作都是在windows中实现(采用wamp server集成安装包),但是转到li ...
- 玩转OneNET物联网平台之MQTT服务⑦ —— 远程控制LED(数量无限制)+ Android App控制 优化第一版
授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...
- [源码解析] 深度学习分布式训练框架 horovod (18) --- kubeflow tf-operator
[源码解析] 深度学习分布式训练框架 horovod (18) --- kubeflow tf-operator 目录 [源码解析] 深度学习分布式训练框架 horovod (18) --- kube ...
- Java并发包源码学习之AQS框架(四)AbstractQueuedSynchronizer源码分析
经过前面几篇文章的铺垫,今天我们终于要看看AQS的庐山真面目了,建议第一次看AbstractQueuedSynchronizer 类源码的朋友可以先看下我前面几篇文章: <Java并发包源码学习 ...
- Java并发包源码学习之AQS框架(三)LockSupport和interrupt
接着上一篇文章今天我们来介绍下LockSupport和Java中线程的中断(interrupt). 其实除了LockSupport,Java之初就有Object对象的wait和notify方法可以实现 ...
- RESTful框架调研
背景 当前的开放服务平台发展趋势,是服务使用者变得多种多样,其中既有各种前端设备(台式机.手机等),又有各种后端服务器,因此必须有一个统一的机制,方便各种服务使用者和开放服务平台进行通信.为了更好的实 ...
- golang学习之beego框架配合easyui实现增删改查及图片上传
golang学习之beego框架配合easyui实现增删改查及图片上传 demo目录: upload文件夹主要放置上传的头像文件,main是主文件,所有效果如下: 主页面: 具体代码: <!DO ...
- 最好的8个 Java RESTful 框架
原文出处: colobu 过去的每一年,涌现出越来越多的Java框架.就像JavaScript,每个人都认为他们知道一个好的框架的功能应该是怎么样的.连我的老祖母现在也使用 一个我从来没有听说过而且可 ...
- 对比深度学习十大框架:TensorFlow 并非最好?
http://www.oschina.net/news/80593/deep-learning-frameworks-a-review-before-finishing-2016 TensorFlow ...
随机推荐
- jquery 分页 Ajax异步
//使用Ajax异步查询数据 <div class="table-responsive"> <table class="table table-bord ...
- Spring AOP 中 advice 的四种类型 before after throwing advice around
spring AOP(Aspect-oriented programming) 是用于切面编程,简单的来说:AOP相当于一个拦截器,去拦截一些处理,例如:当一个方法执行的时候,Spring 能够拦截 ...
- 各大厂商发力5G新机,未来全球手机市场或将呈现新格局
随着5G商用将正式于今年开启落地,运营商和手机厂商都在为新一代网络制式积极做好准备.对于运营商来说,它们在不断增加5G基站的建设,让5G信号覆盖更广泛的范围.而对于手机厂商来说,它们在努力推出旗下的5 ...
- linux文件或目录属性
wc(word count)命令的功能:统计指定文件的字节数.字数.行数.,并将统计结果显示输出 命令参数: -c 只显示字节数 -l 只显示行数 -w 只显示字数 od命令:查看二进制文件信息 ...
- vue通过get方法下载java服务器excel模板
vue方法 handleDownTemplateXls(fileName){ if(!fileName || typeof fileName != "string"){ fileN ...
- leetCode练题——26. Remove Duplicates from Sorted Array
1.题目 26. Remove Duplicates from Sorted Array--Easy Given a sorted array nums, remove the duplicates ...
- Vue系列(六)之常用指令v-model
v-model 基本使用 修饰符 .trim .number .lazy 前面讲到的插值,其实都是单向绑定,数据变-->视图变.有些元素可以与用户交互,比如input,select等,那么我们希 ...
- PTA的Python练习题(一)
最近宅家里没事干,顺便把python给学了.教程和书看了一段时间,但是缺少练习的平台. 想起大一时候练习C语言的PTA平台,就拿来练手了. (因为没有验证码无法提交题目,所以自己用pycharm来做题 ...
- IIS URL Rewrite(URL 重写)-使用教程
IIS URL Rewrite(URL 重写)-使用教程 作者:vkvi 来源:千一网络(原创) 日期:2011-8-17 http://www.cftea.com/c/2011/08/9CRXOL ...
- 四、linux基础-系统目录_安装_相关命令_调度
4 系统目录-安装-版本4.1系统目录Linux的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录“/”,然后在此目录下再创建其他的目录. 在装完Linux系统以后会自动生成一下等目录, ...