编程绘画 安卓编程软件 废旧安卓变废为宝
编程绘画 是一款 可单机可在线的编程系统,轻松的编程体验,终身免费。通过ID 绑定即可实现 在线web 编程 一键运行到安卓端
使用模式:
- 在线编程 安卓端绘画
- 安卓端编程,安卓端绘画
- A安卓端编程,B安卓端绘画
安卓端下载地址
程序截图
在线编程截图
【编程绘画】触摸的使用
编程绘画 是一款 可单机可在线的编程系统,轻松的编程体验,终身免费。通过ID 绑定即可实现 在线web 编程 一键运行到安卓端
使用模式:
安卓端下载地址
程序截图
在线编程截图
【编程绘画】触摸的使用
用i2cdetect -F 0 来查看I2C 0号总线启用的功能
root@Widora:/# i2cdetect -F 0
Functionalities implemented by /dev/i2c-0:
I2C yes
SMBus Quick Command yes
SMBus Send Byte yes
SMBus Receive Byte yes
SMBus Write Byte yes
SMBus Read Byte yes
SMBus Write Word yes
SMBus Read Word yes
SMBus Process Call yes
SMBus Block Write yes
SMBus Block Read no
SMBus Block Process Call no
SMBus PEC yes
I2C Block Write yes
I2C Block Read yes
查看I2C 0号总线上挂载的设备
root@Widora:/# i2cdetect -y 0
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- UU -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- UU -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- 48 -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
其中标识为UU的设备(地址分别为0x1a和0x34)表示内核已经加载了相应的驱动,而地址为0x48的I2C设备尚未被内核所驱动。
在sysfs文件中可查看已被内核驱动的I2C设备的名称
root@Widora:/# ls /sys/bus/i2c/devices
0-001a 0-0034 i2c-0
root@Widora:/# cat /sys/bus/i2c/devices/0-001a/name
wm8960
root@Widora:/# cat /sys/bus/i2c/devices/0-0034/name
codec_wm8960
root@Widora:/# i2cdump -y 0 0x48 W
0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef
00: 1e 00 4b 00 ff ff ff ff 1e 00 4b 00 ff ff ff ff ?.K.....?.K.....
10: 1e 00 4b 00 ff ff ff ff 1e 00 4b 00 ff ff ff ff ?.K.....?.K.....
20: 1e 00 4b 00 ff ff ff ff 1e 00 4b 00 ff ff ff ff ?.K.....?.K.....
30: 1e 00 4b 00 ff ff ff ff 1e 00 4b 00 ff ff ff ff ?.K.....?.K.....
40: 1e 00 4b 00 ff ff ff ff 1e 00 4b 00 ff ff ff ff ?.K.....?.K.....
50: 1e 00 4b 00 ff ff ff ff 1e 00 4b 00 ff ff ff ff ?.K.....?.K.....
60: 1e 00 4b 00 ff ff ff ff 1e 00 4b 00 ff ff ff ff ?.K.....?.K.....
#encoding=utf-8
import cv2
import time
from poster.encode import multipart_encode
import urllib2
import os,shutil
import sys
from urllib2 import Request, urlopen, URLError, HTTPError
from poster.encode import multipart_encode
from poster.streaminghttp import register_openers
import datetime
import socket
import time
DATAMARK=1
TLINK=2
GIZWITS=3
print "open video0"
cap=cv2.VideoCapture(0)
print cap
pre_frame = None
def post(file):
register_openers()
f=open(file, "rb")
datagen, headers = multipart_encode({"myFile": f})
request = urllib2.Request("http://trtos.com/web/datamark/upload.php", datagen, headers)
try:
response = urllib2.urlopen(request)
print response.read()
except URLError,e:
print e.reason
print e.code
def send(context,name,id):
if name==DATAMARK:
context=context+"\n"
ss=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
ss.connect(('trtos.com',80))
msg="POST /php/api.php?id="+id+" HTTP/1.1\n"+ \
"Content-Type: application/x-www-form-urlencoded\n"+ \
"Host: trtos.com\n"+ \
"Content-Length: "+str(len(context))+"\n"+ \
"Expect: 100-continue\n"+ \
"Connection: Keep-Alive\n\n\n"+context
ss.sendall(msg)
ss.close()
print msg
elif name==TLINK:
ss=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
ss.connect(('tcp.tlink.io',8647))
time.sleep(1)
ss.sendall(id)
time.sleep(1)
ss.sendall(context)
ss.close()
print id,context,name
elif name==GIZWITS:
print "机智云"
while(1):
ret,frame=cap.read()
curframe=frame.copy()
k=cv2.waitKey(1)
gray_img=cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
gray_img=cv2.resize(gray_img, (500, 500))
gray_img=cv2.GaussianBlur(gray_img, (21, 21), 0)
if pre_frame is None:
pre_frame = gray_img
else:
img_delta = cv2.absdiff(pre_frame, gray_img)
thresh = cv2.threshold(img_delta, 25, 255, cv2.THRESH_BINARY)[1]
thresh = cv2.dilate(thresh, None, iterations=2)
thresh,contours, hierarchy = cv2.findContours(thresh.copy(),cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
for c in contours:
if cv2.contourArea(c) < 3000:
print cv2.contourArea(c)
continue
else:
(x,y,w,h) = cv2.boundingRect(c)
cv2.rectangle(curframe,(x,y),(x+w,y+h),(0,255,0),2)
cv2.imwrite("5uT5zGTG.jpg",curframe)
post("5uT5zGTG.jpg")
shutil.move("5uT5zGTG.jpg","/home/pi/record/"+datetime.datetime.now().strftime('%Y_%m_%d_%H_%M_%S')+".jpg")
send("area:"+str(cv2.contourArea(c)),DATAMARK,"5uT5zGTG")
pre_frame = gray_img
time.sleep(1)
cap.release()`
使用ubuntu18.2 系统或者其他系统
默认会安装python2.7
sudo apt install python
sudo apt install python-opencv
sudo apt install python-pip
JSON 操作 DataMark 数据项
地址:http://dm.trtos.com/php/json.php
Post 添加数据
{"action":"add","id":"y9JM9Rd","content": [{"name": "项目1","value": "5555"},{"name": "项目2","value": "1234"}]}
返回
{"action":"add","status":"succeed"}
Post 删除所有数据
{"action":"del","id":"y9JM9Rd"}
返回
{"action":"del","status":"succeed"}
Post 获取分配ID
{"action":"getid"}
返回
{"action":"getid","id":"y9JM9Rd"}
Post 获取记录(必要参数id,可选参数name,value)
{"action":"get","id":"y9JM9Rd"}
{"action":"get","id":"y9JM9Rd","name":"项目1"}
{"action":"get","id":"y9JM9Rd","name":"项目1","value":"5555"}
返回
[{"Name":"Name1","Value":"xiaowu"},{"Name":"Name2","Value":"Xiaotian"}]
上传背景图代码 可用于监控
#!usr/bin/python
# image.py
# -*- coding=utf-8 -*-
from poster.encode import multipart_encode
import urllib2
import sys
from urllib2 import Request, urlopen, URLError, HTTPError
from poster.encode import multipart_encode
from poster.streaminghttp import register_openers
register_openers()
f=open("4UTmPcpw.jpg", "rb")
datagen, headers = multipart_encode({"myFile": f})
request = urllib2.Request("http://trtos.com/web/datamark/upload.php", datagen, headers)
try:
response = urllib2.urlopen(request)
print response.read()
except URLError,e:
print e.reason
print e.code
修改数据标签 指定选项内容
这种方式比较简单 直接通过浏览器访问方式操作
eg:设置名和值 http://dm.trtos.com/web/datamark/update.php?id=5oOeooHz&index=149717&name=使用率&value=99%
eg:设置名 http://dm.trtos.com/web/datamark/update.php?id=5oOeooHz&index=149717&name=使用率
eg:获取名和值 http://dm.trtos.com/web/datamark/update.php?id=5oOeooHz&index=149717
下例 是使用python 上传 ip地址
import requests
import datetime
import socket
def get_host_ip():
"""
查询本机ip地址
:return: ip
"""
try:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(('8.8.8.8', 80))
ip = s.getsockname()[0]
finally:
s.close()
return ip
hostname = socket.gethostname()
ip = socket.gethostbyname(hostname)
ip="0.0.0.0"
ip=get_host_ip()
date=datetime.datetime.now()
response = requests.get('http://dm.trtos.com/web/datamark/update.php?id=5oOeooHz&index=149717&name=树莓派IP&value='+ip+":"+str(date))
print(response.text)
共享变量
设置值 http://www.trtos.com/php/value.php?name=my_value&value=123456
读取值 http://www.trtos.com/php/value.php?name=my_value
15年的一个众筹项目,失败了。
https://github.com/tongjinlv/TRTOS.git
原理图
PCB截图
代码地址 https://github.com/tongjinlv/TRTOS.git
硬件下载地址 使用Altium Designer 16 开发 https://github.com/RTOS-Developers/Geekinsect-Handware.git
GeekInsect(IDE).zip
1、项目背景
对于目前市面上的智能玩具功能单一,不具备扩展性,多以几个可选动作或循环几个动作为主,很古板单调,玩一段时间就疲倦乏味,这就是我们要开发这款可编程极客虫的原因,在玩的同时对提高编程思维能力有所帮助,并且非常适合用来开发儿童的创意性思维,极客虫也是一套极适合用来开发仿生机器人的硬件,携带的传感器完全可以实现趋光跟随避障和循迹等动作。
2、我想要做什么
极客虫是我们的第一款硬件产品既可以用来做编程练习又可以增加乐趣,我们已经尽可能的把体验做到极致。
1、灵活:两侧一对空心杯电机提供整只虫子的动力,极其灵活,可以实现原地旋转和任意方向爬行。
2 小巧:整体尺寸仅为3.9cm6.2cm2cm,大概只有两个多硬币大小,放置在大小刚刚好的碳化竹收藏盒内,刚好合适,方便随身携带。
3、方便:固件更新、应用下载、调试、充电等都通过尾部的micoUSB接口,内部固化的BOOT引导程序加上usb复位重启机制使之不可能死机。配套的固件开发环境支持F5一键下载固件,免去了使用stlink下载的繁琐,配套的拖拽式开发环境可以一键下载应用无需重启直接运行,无需任何设置。
4、集成化设计:所有传感器均集成到主板,保证了体积小高可靠性。
4、非常容易上手的集成拖拽式开发环境。
3、产品面向的用户群体
我们的用户群体:所有对仿生机器人、玩具开发有兴趣的人或以教学为目的的组织机构。
极客虫涉及到的软硬件都是我们自己研发的,没有使用任何开源组件:
极客虫运行的是我们自主开发的开源操作系统TRTOS,一直应用于工业设备开发,稳定性和灵活性很高,上手也非常容易。并已经开发出成熟的深度应用us级别解析器,多任务动态创建,配合拖拽式编程开发环境Geekinsect(IDE),就算你不会编程也能分分钟写出应用,Geekinsect(IDE)集成了固件和应用联网同步共享功能,联合MDK开发环境实现编译完成即刻共享。
4、产品的亮点、如何使用产品
我们的宗旨就是体验,质量,美感一个也不能少,始终把体验放在第一位,尽量保证在不需要说明书的前提下都能够直接使用。
用户在收到极客虫后登陆收纳盒上的网址,下载拖拽式开发环境并连接极客虫到电脑即可进行拖拽式开发,想了解更多或对其进行深层次的开发请加技术支持群或访问TRTOS主页。
5、项目的困难和风险
https://git.weixin.qq.com/tongjinlv/airauto.git
使用前需要把"appid": "wx366ce055828d4046",改成你自己的
{
"description": "项目配置文件。",
"setting": {
"urlCheck": true,
"es6": true,
"postcss": true,
"minified": true,
"newFeature": true
},
"compileType": "miniprogram",
"libVersion": "2.8.2",
"appid": "wx366ce055828d4046",
"projectname": "lightblue",
"simulatorType": "wechat",
"simulatorPluginLibVersion": {},
"condition": {
"search": {
"current": -1,
"list": []
},
"conversation": {
"current": -1,
"list": []
},
"game": {
"currentL": -1,
"list": []
},
"miniprogram": {
"current": -1,
"list": []
}
}
}
宇宙的结构对大家来说并不陌生,可有问,银河系外是什么?大家都会说,还是宇宙,那么宇宙之外呢?对于这点本人有一些关点,或许证据不足,但希望能获到抛砖引玉的作用。以下就是本人的观点:
宇宙中有各种物质团(一些物质组合在一起的团体例如:地球、面包、电子等)而这些物质团只是在同等级观测的情况下辨别出该物质团的而称呼的。
宇宙的结构对大家来说并不陌生,可有问,银河系外是什么?大家都会说,还是宇宙,那么宇宙无极论
之外呢?对于这点本人有一些观点,或许证据不足,但希望能起到抛砖引玉的作用。以下就是本人的观点:
宇宙中有各种物质团(一些物质组合在一起的团体例如:地球、面包、电子等)而这些物质团只是在同等级观测的情况下辨别出该物质团的而称呼的(例如:一个苹果,我们用同一等级眼睛观测,它就是一个苹果,如果用显微镜看,那么它就是一堆细胞结构,但如果用比显微境小一个甚至多个观测级别去观测,那样会获得一个什么样的观测结果呢?同理我们也可用比观测太阳系级别大一个或多个级别的观测级去观测宇宙以及宇宙的属体(A属于B的一部分,就称为B是A的属体)就这样用一个非常大或非常小的观测级去观测对应物质团,那么又将会获得什么样的观测结果呢?对于这这一点任何一个物质团是可以再分的,也就是说没有最大或最小的观测级,目前人们还不知道宇宙之外是什么,那是因为现在的科学技术达不到。技术达不到是作的猜想当技术达到时更会加深猜想的准确性。个人猜想是,地球和原子只是不同观测级别的物质团,而地球与太阳的关系可以认为相同于原子核与电子的关系,同理可推出人们现在定义的宇宙只不过是某个物质团的组成部分,结论:任何一切实体都是一个属体,都可再分出多个甚至无数个物质团出来,这就是一种无极小(大)理论
【大概十年前发表在新浪博客上的,突然翻出来 贴过来】