分类 科学 的文章

编程绘画 安卓编程软件 废旧安卓变废为宝

编程绘画 是一款 可单机可在线的编程系统,轻松的编程体验,终身免费。通过ID 绑定即可实现 在线web 编程 一键运行到安卓端
使用模式:

  1. 在线编程 安卓端绘画
  2. 安卓端编程,安卓端绘画
  3. A安卓端编程,B安卓端绘画

安卓端下载地址
程序截图
A10A9B2E7C359CEFE716C3622D902AD3.jpg
FC93182F7A066F4376D1FFBCBBCEFD4B.jpg
在线编程截图
屏幕快照 2020-05-11 下午8.55.43.png

【编程绘画】触摸的使用

openwrt 操作IIC

img_3075-removebg.png
img_3082-removebg.png

固件内置了i2ctools软件包

  1. 用i2cdetect -l 命令来列出所有I2C总线
    root@Widora:/# i2cdetect -l
    i2c-0 i2c 10000900.i2c I2C adapt
  2. 用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

  3. 查看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设备尚未被内核所驱动。

  1. 在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
    
  2. 用i2cdump -y 0 0x48 W 命令来读取地址为0x48的I2C设备(LM75温度传感器)所有寄存器中的内容
 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.....
  1. 用i2cget -y 0 0x48 0 w 命令来读取地址为0x48的I2C设备0号寄存器中的内容

利用树莓派结合datamark 实现远程移动监控

请输入图片描述

#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()`

python-opencv环境搭建

使用ubuntu18.2 系统或者其他系统
默认会安装python2.7
sudo apt install python
sudo apt install python-opencv
sudo apt install python-pip2019-11-23 18-12-21 的屏幕截图.png

DataMark 云便签 API

地址 http://dm.trtos.com/

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"}]

上传背景图代码 可用于监控
微信截图_20200703145710.png

#!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

修改数据标签 指定选项内容
这种方式比较简单 直接通过浏览器访问方式操作
微信截图_20200703152045.png
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
_20191108143604.jpg
微信图片_20191108143556.jpg
原理图
QQ截图20191108144434.png
PCB截图

QQ截图20191108145330.png

代码地址 https://github.com/tongjinlv/TRTOS.git
硬件下载地址 使用Altium Designer 16 开发 https://github.com/RTOS-Developers/Geekinsect-Handware.git
GeekInsect(IDE).zip

24058711_1139850856152505_7019318682367256450_n.jpg

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、项目的困难和风险

  1. 在进行电源设计的时候刚开始为了效果好用了DCDC,最后发现都没有手册上的描述的效果好,就后就换成了数字部分LDO供电其他部强供电。
  2. 由于考虑到拨动开关影响外观,用一个按钮做开关机和功能复用键,关机0功耗,在关机模式下usb能强制唤醒和复位,用来保证不可能成为板砖,为了这部分电路打了两次板调试了很久,最后终于获得满意的效果;
  3. 为了保证普通用户能够方便使用,单独开发了一套BOOT固件和BOOT升级APP可以嵌入到MDK中使用。

局域网通过模拟http协议共享文件

面对win的共享功能 时灵时不灵 很头疼,就做了一个局域网共享文件应用,实现的机理就是模拟web服务器共享本地文件,无任何依赖。

运行界面如下

QQ截图20191108151259.png

在局域网内其他电脑登陆 当前电脑IP地址 即可访问,如无法访问一般关闭防火墙即可,如果80端口被占用,重新命名文件Sardir[81].exe 再次运行即可改变端口到81

20191107164349.png

下载地址 包含代码

Shardir.zip

使用C# 开发

分享一个蓝牙BLE调试小程序LightBlue

界面如下,使用前先打开蓝牙,下滑启动扫描,点击连接就可以进行通信了

微信图片_20191106170323.jpg

安卓 IOS都可以使用,扫如下小程序码可以使用

微信图片_20191107120931.jpg
gh_b4c2afc67e18_258.jpg

欢迎提交BUG,或加入一起开发

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": []
        }
    }
}

无极论-宇宙大到无穷粒子小到无穷

宇宙的结构对大家来说并不陌生,可有问,银河系外是什么?大家都会说,还是宇宙,那么宇宙之外呢?对于这点本人有一些关点,或许证据不足,但希望能获到抛砖引玉的作用。以下就是本人的观点:
宇宙中有各种物质团(一些物质组合在一起的团体例如:地球、面包、电子等)而这些物质团只是在同等级观测的情况下辨别出该物质团的而称呼的。
宇宙的结构对大家来说并不陌生,可有问,银河系外是什么?大家都会说,还是宇宙,那么宇宙无极论
68396762x97851013775b.jpg
之外呢?对于这点本人有一些观点,或许证据不足,但希望能起到抛砖引玉的作用。以下就是本人的观点:
宇宙中有各种物质团(一些物质组合在一起的团体例如:地球、面包、电子等)而这些物质团只是在同等级观测的情况下辨别出该物质团的而称呼的(例如:一个苹果,我们用同一等级眼睛观测,它就是一个苹果,如果用显微镜看,那么它就是一堆细胞结构,但如果用比显微境小一个甚至多个观测级别去观测,那样会获得一个什么样的观测结果呢?同理我们也可用比观测太阳系级别大一个或多个级别的观测级去观测宇宙以及宇宙的属体(A属于B的一部分,就称为B是A的属体)就这样用一个非常大或非常小的观测级去观测对应物质团,那么又将会获得什么样的观测结果呢?对于这这一点任何一个物质团是可以再分的,也就是说没有最大或最小的观测级,目前人们还不知道宇宙之外是什么,那是因为现在的科学技术达不到。技术达不到是作的猜想当技术达到时更会加深猜想的准确性。个人猜想是,地球和原子只是不同观测级别的物质团,而地球与太阳的关系可以认为相同于原子核与电子的关系,同理可推出人们现在定义的宇宙只不过是某个物质团的组成部分,结论:任何一切实体都是一个属体,都可再分出多个甚至无数个物质团出来,这就是一种无极小(大)理论
【大概十年前发表在新浪博客上的,突然翻出来 贴过来】